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个朋友和自己)个人 要求每一个人分相同面积 但不能分到超过一个派 即最多把一整个派给某个人 问能平均分的最大面积 二 ...
随机推荐
- resharper 改为VS自带的F12功能(转到定义)
1:如何设置vs默认的快捷键方式: 2:重新设置resharper的F12及其其它选项设置: 3.如果还需要使用快捷键 Alt+ENTER 1.帮你实现某个接口或抽象基类的方法 2.提供你处理当 ...
- PHP 开发API接口签名验证
就安全来说,所有客户端和服务器端的通信内容应该都要通过加密通道(HTTPS)传输,明文的HTTP通道将会是man-in-the- middle及其各种变种攻击的温床.所谓man-in-the-midd ...
- 【Java EE 学习 57】【酒店会员管理系统之分页模板书写】
分页一直是一个比较麻烦的问题,特别是在我做的这个系统中更是有大量的分页,为了应对该问题,特地写了一个模板以方便代码重用,该模板包括后台分页的模板.前端显示的模板两部分. 一.分页分析 分页需要三种类型 ...
- Windows7 64位系统搭建Cocos2d-x-2.2.1最新版以及Android交叉编译环境(详细教程)
Windows7 64位系统搭建Cocos2d-x-2.2.1最新版以及Android交叉编译环境(详细教程) 声明:本教程在参考了以下博文,并经过自己的摸索后实际操作得出,本教程系本人原创,由于升级 ...
- 详解Eclipse断点
原文链接:http://www.blogjava.net/jiangshachina/archive/2011/11/20/364367.html 大家肯定都用过Eclipse的调试的功能,在调试的过 ...
- Javascript 构造函数原型继承机制
我们先聊聊Js的历史,1994年Netscape公司发布了Navigator浏览器0.9班.这是历史上第一个比较成熟的网络浏览器.轰动一时.但是,这个版本的浏览器只能用来浏览,不具备交互功能,最主要的 ...
- 转:MYSQL连接字符串参数解析(解释)
被迫转到MySQL数据库,发现读取数据库时,tinyint类型的值都被转化为boolean了,这样大于1的值都丢失,变成true了.查阅资料MySQL中无Boolean类型,都是存储为tinyint了 ...
- selenium获取Cookie操作
直接贴代码: Set cookies = dr.manage().getCookies(); for (Cookie cookie : cookies) { System.out.println(&q ...
- 【加精】手机话费充值API接口(PHP版)
电商周年庆,公司搞了一个关注微信公众号送小额话费的活动,送1元.2元.5元.10元.20元.50元等不同面值的. 为了实现话费充值服务,找了多家开通了话费接口服务,接入后测试.先是做接口整合的平台,P ...
- Android 开源项目及其学习
Android 系统研究:http://blog.csdn.net/luoshengyang/article/details/8923485 Android 腾讯技术人员博客 http://hukai ...