首页 > 代码库 > 九度 题目1551:切蛋糕
九度 题目1551:切蛋糕
题目链接http://ac.jobdu.com/problem.php?pid=1551
转载请注明本文地址 http://blog.csdn.net/yangnanhai93/article/details/41046547
这个题目的主要难度在于分析题目如何解决。
我们得到上图的结果,得S1/S2=r,即S1=r*S2;
又S1+S2=PI*R*R(圆的面积)
得到S1=(PI*R*R)*r/(1+r);
假设刀痕的长度为2L,则其一半为L,且sin(a)=l/R
则a=arcsin(l/R)
扇形面积为S3=R*R*(2*a)/2
三角形的面积为S4=L*sqrt(R*R-L*L)/2
所以S1new=S3-2*S4
此时只需要S1new 和S1的差别不大,即满足精度要求,则L也是满足要求的
注意一点是比例有可能大于1,转换一下,发现其实只需要对变成1/r,就可以变换回来
代码如下:
#include <stdio.h> #include <math.h> #include <cmath> using namespace std; #define PI asin(1.0)*2 int main() { double R,r; //freopen("data.in","r",stdin); while(scanf("%lf%lf",&R,&r)!=EOF) { if(r>1) r=1/r; double low=0,high=R; double s=PI*R*R*r/(1+r),l,result; while(true) { l=(low+high)/2; result=R*R*asin(l/R)-sqrt(R*R-l*l)*l; if(abs(result-s)<0.0000001) break; if(result>s) high=l; if(result<s) low=l; } printf("%.2lf\n",2*l); } return 0; } /************************************************************** Problem: 1551 User: vincent_ynh Language: C++ Result: Accepted Time:0 ms Memory:1100 kb ****************************************************************/
九度 题目1551:切蛋糕
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。