poj3122-Pie(二分法+贪心思想)
一,题意:
有f+1个人(包括自己),n块披萨pie,给你每块pie的半径,要你公平的把尽可能多的pie分给每一个人
而且每个人得到的pie来自一个pie,不能拼凑,多余的边角丢掉。
二,思路:
1,输入,并找出最大体积的pie
2,二分法记录每一种情况的体积,及能分给几个人,
贪心的思想:
先取能分给n-1个人的最大体积,逐渐减少每份pie的体积
直到最接近n个人都能获得的pie的最大的体积
3, 输出。
三,步骤:
1,输入,max存储最大的pie体积
2,二分法:
i,退出条件max-min <= 1e-6;
由n-1个人体积慢慢减少,逐渐接近n个人的体积,
最后mid存储的pie体积即为每个人分得的最大体积。
ii,count记录pie能分的份数
iii, 如果份数 < 人数,减少每份pie的体积,即max = mid ; mid = (min+max)/2;
否则,增加每份pie的体积,即min = mid ; mid = (min+max)/2;
3,输出:注意控制输出的小数位数。
#include<iostream>
#include<iomanip>
using namespace std;
const double PI = 3.14159265359; //这是最短的PI长度,再短就WA了
const double esp = 1e-; //为了double二分法设定的最小精度限制值
double pie[]; int main(){
int t , n , f; //n表示一开始pie的份数,f表示朋友的人数
cin>>t;
while(t--){
cin>>n>>f;
f++; //人数加上自己
double max = 0.0;
for(int i = ; i < n ; i++){
cin>>pie[i];
pie[i] *= pie[i]; ////半径平方,计算pie的体积时先不乘PI,为了提高精度和减少时间
if(max<pie[i])
max = pie[i]; //记录最大pie的体积
}
double min = 0.0 ; //注意改为0,会出错
double mid ;
while(max-min>esp){ //实数double的二分结束条件不同于整数int的二分结束条件
mid = (min + max)/;
int count = ; //记录根据不同的mid尺寸能分多少份数
for(int i = ; i < n ; i++){
count += (int)(pie[i]/mid);//第i个pie按照mid的尺寸去切,最多能分的人数(取整)
}
if(count < f) max = mid ; //mid偏大
else min = mid ; //mid偏小
// cout<<count<<"-"<<mid<<" "; //输出一下,你会发现其中的奥妙。
}
cout<<fixed<<setprecision()<<PI*mid<<endl;//fixed与setprecision配合使用规定小数点后的位数
}
return ;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
poj3122-Pie(二分法+贪心思想)的更多相关文章
- POJ-3122.Pie(二分法最大化平均值)
二分法的主题思路就是逐步逼近,所以这道题的思路自然一目了然,做题思路也是... 本题大意:题主过生日,它买了N块半径为R[ i ],高为1的圆柱形蛋糕,现在他要将这N块蛋糕等分给F + 1个人,为了好 ...
- hdu 4105 贪心思想
淋漓尽致的贪心思想 波谷一定是一位数.波峰一位数不够大的时候加入到两位数就一定够大了的. 当在寻找波谷碰到零了就自然当成波谷. 当在寻找波峰时碰到零时,将前面的波谷加到前一个波峰上.让当前的零做波谷, ...
- NOIP2012BLOCKADE贪心思想证明
NOIP2012BLOCKADE贪心思想证明 这道题的做法是二分时间并检验这个时间是否可行.检验的方法要用到贪心思想. 对于不能到根结点的军队应该尽量向根结点走. 如果军队A能走到根结点但到根结点后剩 ...
- 贪心思想之区间贪心 关联洛谷P1803
力扣上也有一道类似的题 几乎是一样 输出不同 → 力扣leetcode 435. 无重叠区间 区间贪心是比较经典的 就拿洛谷P1803来举例 题目大意 n个比赛 [开始时间,结束时间] 问一个人最多能 ...
- poj1323-Game Prediction(贪心思想)
贪心的思想:尽量的从最大值找起.然后在剩余之中,再从最大值找起. 一,题意: M个人,每人N张牌,每轮比较谁出的牌大,最大者为胜.现在给定M和N,以及你的牌,要求输出你至少能确保获得几轮的胜利 从&q ...
- HDU 4857 逃生(反向建边的拓扑排序+贪心思想)
逃生 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submissi ...
- POJ 3687 Labeling Balls(反向拓扑+贪心思想!!!非常棒的一道题)
Labeling Balls Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 16100 Accepted: 4726 D ...
- hdu 1969 Pie (二分法)
Pie Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submiss ...
- 【POJ 3122】 Pie (二分+贪心)
id=3122">[POJ 3122] Pie 分f个派给n+1(n个朋友和自己)个人 要求每一个人分相同面积 但不能分到超过一个派 即最多把一整个派给某个人 问能平均分的最大面积 二 ...
随机推荐
- C# ADO.net 数据库连接池
前一阵开发一套系统,同组的同事提供了一个数据库连接组件,是他自己封装的,使用了自定义的连接池,用着很是不爽,而且经常会因为程序不严谨的原因,导致连接池里的连接被用完,也导致其他错误,因此我想自己研究一 ...
- javascript 框架、根基技巧、布局、CSS、控件 JavaScript 类库
预筹备之 JavaScript 今朝支流的 JavaScript 框架排名中,jQuery 和 Ext 可算是佼佼者,得到了用户的普遍好评.海内的一些框架许多也是模仿 jQuery 对 JavaScr ...
- [leetcode] 数字游戏
169. Majority Element Given an array of size n, find the majority element. The majority element is t ...
- mysql乐观锁总结和实践
乐观锁介绍: 乐观锁( Optimistic Locking ) 相对悲观锁而言,乐观锁假设认为数据一般情况下不会造成冲突,所以在数据进行提交更新的时候,才会正式对数据的冲突与否进行检测,如果发现冲突 ...
- 【iOS自定义键盘及键盘切换】详解
[iOS自定义键盘]详解 实现效果展示: 一.实现的协议方法代码 #import <UIKit/UIKit.h> //创建自定义键盘协议 @protocol XFG_KeyBoardDel ...
- maven执行报错resolution will not be reattempted until the update interval of nexus h
maven在执行过程中抛错: 引用 ... was cached in the local repository, resolution will not be reattempted until t ...
- mybatis自增长插入id
第一种: <insert id="insertUser" parameterClass="ibatis.User"> <selectKey r ...
- 通用js函数集锦<来源于网络> 【二】
通用js函数集锦<来源于网络> [二] 1.数组方法集2.cookie方法集3.url方法集4.正则表达式方法集5.字符串方法集6.加密方法集7.日期方法集8.浏览器检测方法集9.json ...
- Unity插件使用总结
移动文件夹位置会引起错误的插件:EasySave2.MaterialUI.Gamestrap UI.Beautify
- maven构建简单的web项目
把jdk给换掉 项目修改好了以后写个页面测试一下,结果正常 下面应该添加依赖让web项目一步步丰满起来. 0-添加依赖 1-建一个servlet 2-web.xml中添加servlet声明 3-重新运 ...