POJ_3122 经典二分题
| Time Limit: 1000MS | Memory Limit: 65536K | |||
| Total Submissions: 8594 | Accepted: 3124 | 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 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
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 我去。。。这个题目已经做过一遍了,今天挂在比赛上,还把它当难题看。。还满脑子想的是背包和动归
一个经典的二分搜索题,注意人数要+1个,包括主人在内
#include <iostream>
#include <cstdio>
#include <cmath>
const double pi = acos(-1.0);//这个式子可以直接求出pi
double area[];
int n,f;
bool judge(double x)//这个专门用来判断当前mid值是大了还是小了,也是该二分的精髓
{
int sum=;
for (int i=; i<n; i++)
{
sum+=(int)(area[i]/x);//这个式子用来统计出当前pie可以供给多少块mid大小的蛋糕,非常厉害啊。
}
if (sum>=f) return true;//如果可以供给超过总人数,说明当前mid值偏小了,还可以切大一点。
else
return false;
}
int main()
{
int t;
scanf("%d",&t);
while (t--)
{ scanf("%d %d",&n,&f);
double sum=;
int r;
for (int i=; i<n; i++)
{
scanf("%d",&r);
area[i]=r*r*pi;
sum+=area[i];
}
f++;//根据题目意思,主人也要分一块,注意人数要在原来基础上+1;
double l=,right=sum/(f*1.0),mid;//将二分搜索的上界这样定义是理想状态所有pie都能被分到。
while (right-l>1e-)//以精度为二分终止的界限
{
mid=(l+right)/;
if (judge(mid))
{
l=mid;
}
else
right=mid;
}
printf("%.4lf\n",l);
}
return ;
}
POJ_3122 经典二分题的更多相关文章
- [经典算法题]寻找数组中第K大的数的方法总结
		
[经典算法题]寻找数组中第K大的数的方法总结 责任编辑:admin 日期:2012-11-26 字体:[大 中 小] 打印复制链接我要评论 今天看算法分析是,看到一个这样的问题,就是在一堆数据 ...
 - 经典算法题每日演练——第十七题 Dijkstra算法
		
原文:经典算法题每日演练--第十七题 Dijkstra算法 或许在生活中,经常会碰到针对某一个问题,在众多的限制条件下,如何去寻找一个最优解?可能大家想到了很多诸如“线性规划”,“动态规划” 这些经典 ...
 - 经典算法题每日演练——第十六题 Kruskal算法
		
原文:经典算法题每日演练--第十六题 Kruskal算法 这篇我们看看第二种生成树的Kruskal算法,这个算法的魅力在于我们可以打一下算法和数据结构的组合拳,很有意思的. 一:思想 若存在M={0, ...
 - 经典算法题每日演练——第十四题 Prim算法
		
原文:经典算法题每日演练--第十四题 Prim算法 图论在数据结构中是非常有趣而复杂的,作为web码农的我,在实际开发中一直没有找到它的使用场景,不像树那样的频繁使用,不过还是准备 仔细的把图论全部过 ...
 - 经典算法题每日演练——第十一题 Bitmap算法
		
原文:经典算法题每日演练--第十一题 Bitmap算法 在所有具有性能优化的数据结构中,我想大家使用最多的就是hash表,是的,在具有定位查找上具有O(1)的常量时间,多么的简洁优美, 但是在特定的场 ...
 - 经典算法题每日演练——第八题 AC自动机
		
原文:经典算法题每日演练--第八题 AC自动机 上一篇我们说了单模式匹配算法KMP,现在我们有需求了,我要检查一篇文章中是否有某些敏感词,这其实就是多模式匹配的问题. 当然你也可以用KMP算法求出,那 ...
 - 经典算法题每日演练——第六题 协同推荐SlopeOne 算法
		
原文:经典算法题每日演练--第六题 协同推荐SlopeOne 算法 相信大家对如下的Category都很熟悉,很多网站都有类似如下的功能,“商品推荐”,"猜你喜欢“,在实体店中我们有导购来为 ...
 - 经典算法题每日演练——第七题 KMP算法
		
原文:经典算法题每日演练--第七题 KMP算法 在大学的时候,应该在数据结构里面都看过kmp算法吧,不知道有多少老师对该算法是一笔带过的,至少我们以前是的, 确实kmp算法还是有点饶人的,如果说红黑树 ...
 - 「洛谷5017」「NOIP2018」摆渡车【DP,经典好题】
		
前言 在考场被这个题搞自闭了,那个时候自己是真的太菜了.qwq 现在水平稍微高了一点,就过来切一下这一道\(DP\)经典好题. 附加一个题目链接:[洛谷] 正文 虽然题目非常的简短,但是解法有很多. ...
 
随机推荐
- python2学习------基础语法1 (变量、分支语句、循环语句、字符串操作)
			
1.变量类型 Numbers(数字):int,float,long String(字符串) List(列表) tuple(元组) dict(字典) bool(布尔):True,False # 删除变量 ...
 - kali 中文乱码解决方法
			
本文转自https://www.cnblogs.com/sym945/p/11943842.html#4449966 1.更换阿里源 vim /etc/apt/sources.list,编辑源之后,a ...
 - git 创建分支并提交代码
			
1.查看所有分支 git branch -a 2.查看当前分支 git branch 3.新建一个分支 git branch feature-xx 4.切换到新建分支上面 git checkout f ...
 - axis2--生成的wsdl文件方法的参数问题
			
我是一个使用axis2的新手,发现一个问题: * axis2生成的wsdl文件中关于提供服务的方法,其参数名称丢失,会变成args0 * , 原因: axis2 无法从java字节码中获取关于方法签名 ...
 - 用Python实现简单的服务器【新手必学】
			
如何实现服务器... socket接口是实际上是操作系统提供的系统调用.socket的使用并不局限于Python语言,你可以用C或者JAVA来写出同样的socket服务器,而所有语言使用socket的 ...
 - 006.CI4框架CodeIgniter, 加载框架的helper辅助类,调用helper类中的各种函数
			
01. CI4框架作为一个很成熟的框架,给我们提供了很多helper辅助类,我们在代码中可以很方便的使用,如下所示,我们在Controllers中调用Cookies类的set_cookie函数 < ...
 - python-处理json、处理时间
			
1.处理json:import json #json串就是字符串. d = { 'car1':{'color':'red','price':100,'count':50}, 'car2':{'colo ...
 - vue-cli 局域网可访问配置
			
vue-cli 使用官方脚手架搭建以后,本地的config配置已经没有了,默认打开localhost,无法ip访问 只要修改项目目录配置和防火墙配置 1.在项目根目录下面加一个文件vue.config ...
 - S7-300定时器使用总结
			
以后 规定我写博客 标题 全部采用 黄色第 加粗的黑色字体. S7-300 一共5种定时器 5种定时器线圈 S7-300的SIMATIC定时器的个数为(128~2028个)与CPU的型号有关, 定时器 ...
 - 【测试】性能测试及性能测试工具Loadrunner
			
性能测试简介 软件系统的性能包括很多方面,有执行效率,资源占用,系统稳定性,安全性,兼容性,可靠性,可扩展性等.这些都是可以衡量一个软件系统性能好坏的指标.而性能测试是指通过自动化测试工具去模拟多种正 ...