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个朋友和自己)个人 要求每一个人分相同面积 但不能分到超过一个派 即最多把一整个派给某个人 问能平均分的最大面积 二 ...
随机推荐
- javase-->基础知识(三)
1.方法 普通方法:4个必要,1个可选 1):必须有返回值类型,没有返回值用void表示 2):必须有名字 3):必须有()和形参 4):必须有{}方法体 5):可选static,表示静态的方法,可以 ...
- Counter Mode ( CTR )
Encryption Decryption
- LightGBM中GBDT的实现
现在LightGBM开源了,这里将之前的一个文档发布出来供大家参考,帮助更快理解LightGBM的实现,整体思路应该是类似的. LightGBM优雅,快速,效果好,希望LightGBM越来越好:) L ...
- ZooKeeper基本原理
ZooKeeper简介 ZooKeeper是一个开放源码的分布式应用程序协调服务,它包含一个简单的原语集,分布式应用程序可以基于它实现同步服务,配置维护和命名服务等. ZooKeeper设计目的 1. ...
- response基本常识,不是很准确欢迎来纠正。
相应客户端的回应. response.sendError(500,"抱歉你的电脑中毒了!!"); //重定向的相应码 resp.setStatus(302); //重定向的响应头 ...
- python 爬虫(四)
爬遍整个网络 1 当我们访问整个网络的时候,我们不可避免的会访问不同的网站,但是不同的网站会有完全不同的结构和内容... 现在一步一步的构建访问整个网络的脚本 I 从一个网站开始,每一次都爬向不同的网 ...
- shixi
1. ./statsite -f statsite.conf &(后台): 2. ps ax|grep ** 3. bg fg 4.chmod +x start.sh 5.tcpdump ud ...
- iOS 检测状态栏点击事件
当tableView.scrollsToTop=YES不管用时,可以使用以下方法实现点击状态栏使tableView滚动到顶部. - (void) touchesBegan:(NSSet *)touch ...
- MacOS下Express安装过程中遇到的问题
问题描述: 使用nmp install express -g命令全局安装express后,在终端使用express -V命令可以获取到express的版本号,但在引用express的项目运行时,会报缺 ...
- Winform中创建超链接,点击跳转网页
代码如下: System.Diagnostics.Process ie = new System.Diagnostics.Process();ie.StartInfo.FileName = " ...