标签:
Pie |
Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) |
Total Submission(s): 109 Accepted Submission(s): 52 |
|
Problem Description My birthday is coming up and traditionally I‘m serving pie. Not just one pie, no, I have a number N of them, of various tastes and of various sizes. F of my friends are coming to my party and each of them
gets a piece of pie. This should be one piece of one pie, not several small pieces since that looks messy. This piece can be one whole pie though.
|
Input One line with a positive integer: the number of test cases. Then for each test case:
|
Output For each test case, output one line with the largest possible volume V such that me and my friends can all get a pie piece of size V. The answer should be given as a floating point number with an absolute error of at most 10^(-3).
|
Sample Input
3
3 3
4 3 3
1 24
5
10 5
1 4 2 3 4 5 6 5 4 2
|
Sample Output
25.1327
3.1416
50.2655
题意:
一个人要办生日part,有f个馅饼,n个朋友要来参加他的生日part,我们要做的是让着f个馅饼平均分给他的朋友,
形状可以不一样,但是大小要一样,也就是说馅饼的体积要一样,这馅饼的高都为1。这个简单,但是题目要求不能分
从一块一块的凑出来的馅饼。 思路: 用二分搜索,首先算出馅饼的总体积,然后再除以总人数,要注意总人数要加1,因为生日的主人也包括在内,总体积就是 大家能够的到的最大馅饼的体积,但是不能从一块到另一块凑出来,所以要进行二分搜索,mid=(l+r)/2,当达到题意是就退出 循环,输出mid.这里PI的精度要高一些,用acos(-1.0)。 代码: #include<cstdio> #include<cmath> #define PI acos(-1); double v[10001]; int main() { int T,n,f,ri; double l,r,mid,sum; scanf("%d",&T); while(T--) { r=l=0; scanf("%d%d",&n,&f); f++; for(int i=0;i<n;i++) { scanf("%d",&ri); v[i]=ri*ri*PI; r+=v[i]; } r/=f; while(r-l>=1e-6) { sum=0; mid=(l+r)/2.0; for(int i=0;i<n;i++) sum+=(int)(v[i]/mid); if(sum>=f) l=mid; else r=mid; } printf("%.4lf\n",mid); } return 0; }
|
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:
原文地址:http://blog.csdn.net/a1967919189/article/details/47291411