题目链接:http://poj.org/problem?id=3122
题目大意:有N个蛋糕,要分给F+1个人,要求面积相等且每个人得到的是一整块而不是拼接而成的。
思路:每个人分到的面积范围为[0,s总/(F+1)],所以就从最大的那一个开始分,并计算出按此面积能分出多少块。。。。
特别注意这题,开始WA啦很多次就是因为pi的取值,pi取3.1415926精度还不行,要更高才行。。。。好坑呀。。。。
code:
<span style="font-size:18px;">#include<cstdio> #include<iostream> #include<cstring> #include<cmath> #include<algorithm> #define pi 3.14159265358979 using namespace std; int N; double a[10010]; int f(double x) { int ans=0; for(int i=0;i<N;i++) { ans+=(a[i]/x); } return ans; } int main() { int i,j,r; int T,F; scanf("%d",&T); while(T--) { double s=0; scanf("%d%d",&N,&F); for(i=0;i<N;i++) { scanf("%d",&r); a[i]=pi*r*r; s=s+a[i]; } sort(a,a+N); s=s/(F+1); double l=0,h=s; double mid; while(l<=h) { mid=(l+h)/2; if(f(mid)<F+1)//分出的块数少 { h=mid-0.0000001; } else { l=mid+0.0000001; } } printf("%.4lf\n",mid); } return 0; }</span>
原文地址:http://blog.csdn.net/u010304217/article/details/39204037