博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
poj 3122
阅读量:6040 次
发布时间:2019-06-20

本文共 2450 字,大约阅读时间需要 8 分钟。

Pie
Time Limit: 1000MS   Memory Limit: 65536K
Total Submissions: 10309   Accepted: 3651   Special Judge

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.

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.

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

AC代码:

#include
#include
#include
using namespace std;double pi=3.14159265359; //精度要足够大啊,要不wa死了double v[10010];int n,m;double s,vm;int judge(double mid){ int sum=0; for(int i=1;i<=n;i++) sum+=(int)(v[i]/mid); if(sum>=m) return 1; return 0;}int main(){ int T; scanf("%d",&T); while(T--){ scanf("%d%d",&n,&m); s=0.0; m++; for(int i=1;i<=n;i++){ double r; scanf("%lf",&r); v[i]=pi*r*r; s+=v[i]; } vm=s/(m+0.0); double left,right,mid; left=0.0; right=vm; while((right-left)>0.000001){ mid=(right+left)/2; if(judge(mid)) left=mid; else right=mid; } printf("%.4lf\n",left); } return 0;}

转载地址:http://psrhx.baihongyu.com/

你可能感兴趣的文章
四 指针与数组 五 函数
查看>>
硬盘空间满了
查看>>
dutacm.club Water Problem(矩阵快速幂)
查看>>
深入JVM内核--GC算法和种类
查看>>
iOS的AssetsLibrary框架访问所有相片
查看>>
读书笔记三
查看>>
数论 - 最小乘法逆元
查看>>
企业架构研究总结(22)——TOGAF架构开发方法(ADM)之信息系统架构阶段
查看>>
接口测试(三)--HTTP协议简介
查看>>
周志华《机器学习》课后答案——第4章.决策树
查看>>
frameset分帧问题
查看>>
特殊样式:ime-mode禁汉字,tabindex焦点
查看>>
linux
查看>>
Layout父元素点击不到的解决办法
查看>>
【面试次体验】堆糖前端开发实习生
查看>>
基于apache实现负载均衡调度请求至后端tomcat服务器集群的实现
查看>>
C#+QQEmail自动发送邮件
查看>>
[Hadoop]MapReduce多输出
查看>>
Android Activity详解(一)
查看>>
快准车服完成3000万元A+轮融资,年底将开始B轮融资
查看>>