一,题意:
  有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(二分法+贪心思想)的更多相关文章

  1. POJ-3122.Pie(二分法最大化平均值)

    二分法的主题思路就是逐步逼近,所以这道题的思路自然一目了然,做题思路也是... 本题大意:题主过生日,它买了N块半径为R[ i ],高为1的圆柱形蛋糕,现在他要将这N块蛋糕等分给F + 1个人,为了好 ...

  2. hdu 4105 贪心思想

    淋漓尽致的贪心思想 波谷一定是一位数.波峰一位数不够大的时候加入到两位数就一定够大了的. 当在寻找波谷碰到零了就自然当成波谷. 当在寻找波峰时碰到零时,将前面的波谷加到前一个波峰上.让当前的零做波谷, ...

  3. NOIP2012BLOCKADE贪心思想证明

    NOIP2012BLOCKADE贪心思想证明 这道题的做法是二分时间并检验这个时间是否可行.检验的方法要用到贪心思想. 对于不能到根结点的军队应该尽量向根结点走. 如果军队A能走到根结点但到根结点后剩 ...

  4. 贪心思想之区间贪心 关联洛谷P1803

    力扣上也有一道类似的题 几乎是一样 输出不同 → 力扣leetcode 435. 无重叠区间 区间贪心是比较经典的 就拿洛谷P1803来举例 题目大意 n个比赛 [开始时间,结束时间] 问一个人最多能 ...

  5. poj1323-Game Prediction(贪心思想)

    贪心的思想:尽量的从最大值找起.然后在剩余之中,再从最大值找起. 一,题意: M个人,每人N张牌,每轮比较谁出的牌大,最大者为胜.现在给定M和N,以及你的牌,要求输出你至少能确保获得几轮的胜利 从&q ...

  6. HDU 4857 逃生(反向建边的拓扑排序+贪心思想)

    逃生 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submissi ...

  7. POJ 3687 Labeling Balls(反向拓扑+贪心思想!!!非常棒的一道题)

    Labeling Balls Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 16100   Accepted: 4726 D ...

  8. hdu 1969 Pie (二分法)

    Pie Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submiss ...

  9. 【POJ 3122】 Pie (二分+贪心)

    id=3122">[POJ 3122] Pie 分f个派给n+1(n个朋友和自己)个人 要求每一个人分相同面积 但不能分到超过一个派 即最多把一整个派给某个人 问能平均分的最大面积 二 ...

随机推荐

  1. 微信公众平台oauth2.0网页授权参考资料

    http://www.wangwenxiao.com/weixin/wxgzptoauth2_0wysq_12.html

  2. Oracle 11203 + ASM安装 for HP UX

    一,安装前准备 1.创建所需组和用户 /usr/sbin/groupadd -g 1000 oinstall/usr/sbin/groupadd -g 1020 asmadmin/usr/sbin/g ...

  3. 解决Jquery mobile点击较长文本body的时候Header和footer会渐入渐出的问题

         在做一个Phonegap+Jqm工程的时候,出现了如题的问题,相信很多人都遇到过Jquerymobile点击body时候header和footer会闪烁的显示和隐藏问题,fixed却并不能真 ...

  4. Redis 慢速入门(一)

    网上关于redis的入门文章其实已经很多了,这里仅仅以作者特独的视角来学习下redis相关的基础概念. 一切的基础 需要分清楚3个重要的概念,key,type,value. 这里的key为hello, ...

  5. Linux 使用Crontab设置定时调用Shell文件

    定时执行步骤: 利用crontab来定时执行任务大致有如下两步: 1.编写shell脚本 2.利用crontab加入到定时任务队列 一.如何建立shell脚本 程序必须以下面的行开始(必须方在文件的第 ...

  6. JavaScript异步编程的主要解决方案—对不起,我和你不在同一个频率上

    众所周知(这也忒夸张了吧?),Javascript通过事件驱动机制,在单线程模型下,以异步的形式来实现非阻塞的IO操作.这种模式使得JavaScript在处理事务时非常高效,但这带来了很多问题,比如异 ...

  7. T-SQL 递归

    WITH TEMP ([ID], [PARENTID]) AS (SELECT UNIQUEID ,PID FROM [DBO].TB_DEPTINFO D WHERE PID = @ParentId ...

  8. 白银5kg

    领悟: 1.其实大势涨也好,跌也好,如果我们知道价格到哪里会受阻或反弹,能出有出利润的空间,我们就可以做单.

  9. Java工程师层级

  10. 64位主机64位oracle下装32位客户端ODAC(NFPACS版)

    64位主机64位oracle下装32位客户端ODAC(NFPACS版) by dd 1.下载Oracle Data Access Components(ODAC) Xcopy的两个版本: x86:(我 ...