HDU 1969 Pie【二分】
来源:互联网 发布:c语言input是什么意思 编辑:程序博客网 时间:2024/05/16 09:11
Pie
Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 6482 Accepted Submission(s): 2436
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.
My friends are very annoying and if one of them gets a bigger piece than the others, they start complaining. Therefore all of them should get equally sized (but not necessarily equally shaped) pieces, even if this leads to some pie getting spoiled (which is better than spoiling the party). Of course, I want a piece of pie for myself too, and that piece should also be of the same size.
What is the largest possible piece size all of us can get? All the pies are cylindrical in shape and they all have the same height 1, but the radii of the pies can be different.
My friends are very annoying and if one of them gets a bigger piece than the others, they start complaining. Therefore all of them should get equally sized (but not necessarily equally shaped) pieces, even if this leads to some pie getting spoiled (which is better than spoiling the party). Of course, I want a piece of pie for myself too, and that piece should also be of the same size.
What is the largest possible piece size all of us can get? All the pies are cylindrical in shape and they all have the same height 1, but the radii of the pies can be different.
Input
One line with a positive integer: the number of test cases. Then for each test case:
---One line with two integers N and F with 1 <= N, F <= 10 000: the number of pies and the number of friends.
---One line with N integers ri with 1 <= ri <= 10 000: the radii of the pies.
---One line with two integers N and F with 1 <= N, F <= 10 000: the number of pies and the number of friends.
---One line with N integers ri with 1 <= ri <= 10 000: the radii of the pies.
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
33 34 3 31 24510 51 4 2 3 4 5 6 5 4 2
Sample Output
25.13273.141650.2655
Source
NWERC2006
思路:
因为不同的馅饼不像是不同的面粉,能够称取一定的分量,而这个只能进行分割,以一个面积为标准,然后将不同面积的馅饼至少分成相同的面积的m+1份,将多余的馅饼丢掉,就是我们要求的面积,然后要其中的最大的那个面积,就是题目要求的面积!(这个题目刚开始看不懂,还是见得太少!)
注意:①这道题的精度要求比较高所以pi要用acos(-1),(也就是cos(pi)==-1反余弦函数),其头文件是math.h;
② 需要将块数进行取整(也就是a[i]/b要取整),因为你分过之后不够面积要求的要扔掉
③这道题我将圆的面积直接用r*r来代替,然后最终才乘以pi,但是其实也可以在开始算的时候就直接乘上,也比较容易理解!
代码:
/*这道题因为圆饼和称的瓜子不一样,它必须是一个整体,所以只能在一个饼上进行分割,所以不能用总的面积除以人数来求块数,而应该用二分查找,将最大的面积找出来,假设0是最小的面积,在它两个之间进行二分查找,看看能不能找到一个面积,使它能够把圆饼分成大于等于人数的分数取其中的面积的最大值! */#include <stdio.h>#include <math.h>double pi=acos(-1.0);//必须是-1.0,而不能是-1. double a[10005];int n,m;int s(double b)//求给定面积能分成的块数 {int i,t;t=0;for(i=0;i<n;i++){t+=(int)(a[i]/b);//必须强制类型转化成整形,否则小数会往上加,最终有可能进位导致出错!!!! }return t;}double erfen(double l,double r)//用二分法来求能分m+1块的最大的面积! {double mid=0;while(r-l>1e-7){mid=(l+r)/2;if(s(mid)>=m+1) l=mid;elser=mid;}return mid;}int main(){int T,i,j,k,x;double s,t,max;scanf("%d",&T);while(T--){max=0;scanf("%d%d",&n,&m);for(i=0;i<n;i++){scanf("%d",&x);a[i]=1.0*x*x;max=a[i]>max?a[i]:max;//求面积的最大值(这个面积为对应圆面积的整数倍!) }s=erfen(0,max);printf("%.4lf\n",pi*s);//这个就是要求的圆的面积! }return 0;}
0 0
- HDU 1969--Pie【二分】
- HDU 1969 Pie【二分】
- HDU-1969-Pie【二分】
- HDU 1969 Pie(二分)
- hdu 1969 Pie 二分
- HDU 1969 Pie [二分]
- 【二分查找】-HDU-1969-Pie
- HDU 1969 Pie(二分查找)
- HDU 1969 Pie (二分查找)
- hdu-1969-Pie(二分+贪心)
- HDU:1969 Pie (二分)
- hdu 1969 pie 贪心+二分
- 【HDU】-1969-Pie(二分)
- (二分)HDU 1969 pie
- HDU 1969 Pie(二分+模拟)
- Pie(HDU 1969) —— 二分
- HDU 1969 Pie(二分查找)
- HDU 1969(Pie) 二分查找答案
- opencv之深拷贝及浅拷贝,IplImage装换为Mat
- 20.Valid Parentheses (括号匹配)
- hdu/hdoj 1083 courses 题解
- 操作分布式文件之四:如何进行集群内文件复制和并行复制
- iOS开发中tableview中cell图片自定义方法。
- HDU 1969 Pie【二分】
- 用“僵尸对象”调试内存管理问题
- Linux下对文件权限的相关操作
- 【划分树】 HDU 3473 Minimum Sum 中位数
- 运用JS设置cookie、读取cookie、删除cookie
- Restore IP Addresses
- Coreseek的使用步骤
- [LeetCode] Valid Anagram
- Visual Studio 遇到了异常。这个可能是由某个扩展导致的