题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1969

Pie

Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 4513    Accepted Submission(s): 1819

Problem 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 a positive integer: the number of test cases. Then for each test case:
---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
For each test case, output one line with the largest possible volume V such that me and my friends can all get a pie piece of size V. The answer should be given as a floating point number with an absolute error of at most 10^(-3).
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的圆柱形。V=底面积*高
特别注意:1、题目里要给你自己留一块。
2、每个人得到的饼不可以是两块饼拼接在一起的。
3、这里的PI要用acos(-1.0),具体原因还不知道为什么,可能精度要求比较高,因为这里wa几次。0.0
详见代码。
 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cmath>
 4
 5 using namespace std;
 6
 7 #define PI acos(-1.0)
 8
 9 int main ()
10 {
11     int t;
12     while (~scanf("%d",&t))
13     {
14         while (t--)
15         {
16             int n,f,r;
17             double V[10005],v=0,vmax;
18             scanf("%d%d",&n,&f);
19             f=f+1;
20             for (int i=0; i<n; i++)
21             {
22                 scanf("%d",&r);
23                 V[i]=r*r*PI;
24                 v+=V[i];
25                 //cout<<v<<endl;
26             }
27             vmax=v/f;
28             double left,right,mid;
29             left=0;
30             right=vmax;
31             int ans;
32             while ((right-left)>1e-6)
33             {
34                 int flag=0,k=0;
35                 ans=0;
36                 mid=(left+right)/2;
37                 for (int i=0;i<n;i++)
38                 {
39                    // ans+=(int)(V[i]/mid);
40                     //if (ans>=f)
41                         //flag=1;
42                     double vv=V[i];
43                     while(vv>=mid)
44                     {
45                         vv-=mid;
46                         k++;
47                         //cout<<vv<<" "<<k<<endl;
48                         if(k==f)
49                         {
50                             flag=1;
51                             break;
52                         }
53                     }
54                     if(flag==1) break;
55                 }
56                 if(flag==1)
57                     left=mid;
58                 else
59                     right=mid;
60             }
61             printf("%.4lf\n",mid);
62         }
63     }
64     return 0;
65 }

另外一种

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cmath>
 4
 5 using namespace std;
 6
 7 #define PI acos(-1.0)
 8
 9 int main ()
10 {
11     int t;
12     while (~scanf("%d",&t))
13     {
14         while (t--)
15         {
16             int n,f,r;
17             double V[10005],v=0,vmax;
18             scanf("%d%d",&n,&f);
19             f=f+1;
20             for (int i=0; i<n; i++)
21             {
22                 scanf("%d",&r);
23                 V[i]=r*r*PI;
24                 v+=V[i];
25                 //cout<<v<<endl;
26             }
27             vmax=v/f;
28             double left,right,mid;
29             left=0;
30             right=vmax;
31             int ans;
32             while ((right-left)>1e-6)
33             {
34                 int flag=0,k=0;
35                 ans=0;
36                 mid=(left+right)/2;
37                 for (int i=0;i<n;i++)
38                 {
39                     ans+=(int)(V[i]/mid);
40                     if (ans>=f)
41                         flag=1;
42                     if(flag==1) break;
43                 }
44                 if(flag==1)
45                     left=mid;
46                 else
47                     right=mid;
48             }
49             printf("%.4lf\n",mid);
50         }
51     }
52     return 0;
53 }

转载于:https://www.cnblogs.com/qq-star/p/4259387.html

hdu 1969 Pie(二分查找)相关推荐

  1. hdu 1969 pie

    二分,细心细心再细心,精度问题. //freopen("C:\\Documents and Settings\\Administrator\\桌面\\input.txt",&quo ...

  2. hdu 4004 二分查找

    直接二分查找答案即可,我的判断函数没有像大牛们那样优化,但是过是没问题的~ /* * hdu4004/linux.cpp * Created on: 2011-9-4 * Author : ben*/ ...

  3. HDU 1597 find the nth digit (二分查找)

    二分查找 1 #include<stdio.h> 2 __int64 a[65555]; 3 void init() 4 { 5 a[0]=0; 6 for(int i=1;i<65 ...

  4. poj3122 OpenJudge008 Pie派(二分查找)

    点击查看poj原题 解题思路 可以利用二分查找的思想,假设一个面积值进行判断,如果成立则增大此面积再进行判断,不成立则减小面积,直到找到能成立的最大面积值输出.详细过程讲解看代码段. #include ...

  5. hdu 1597 二分查找

    题目很容易理解,给定一个字符串,是有1-9字符组成,在里面1就是1:2就是12:3就是123:10就是1234567891.依次连接. 给定一个位数需要去确定这个位数上的数到底是几? 本题看似一个字符 ...

  6. hdu 3641 数论 二分求符合条件的最小值数学杂题

    http://acm.hdu.edu.cn/showproblem.php?pid=3641 学到: 1.二分求符合条件的最小值 /*================================= ...

  7. c语言分蛋糕均匀正方形,分蛋糕(C - 二分查找)

    分蛋糕 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=85904#problem/C Description My birthd ...

  8. 二分查找(折半查找)详解

    二分查找详解 1. 二分查找的引入 2. 二分的一些基本知识 1) 定义 2) 特点 3. 二分查找的边界问题 1) 常用模板 2)综合练习 4.二分的应用 1) Flyer 2) Distribut ...

  9. 关于LIS(普通方式及二分查找方式)

    一:关于LIS: LIS及最长上升子序列,就是对于一个长度为n的数组,上升子序列指的是对于数组中任意的i<j都满足a[i]<a[j]的子序列. 例子: 对于固定的数组,虽然LIS序列不一定 ...

最新文章

  1. std::map char*做key
  2. php和python写爬虫-为什么选择用python做爬虫
  3. MyBatis 缓存详解-缓存体系结构
  4. mysql query cache 关闭_为什么要关闭MySQL query cache-Fun言
  5. android中json插件,【Android原生插件】package.json中关于第三方aar的配置
  6. 小程序开发提示没有npm路径_百度小程序三个框架的各自的特点
  7. 解决ie8及低版本浏览器不支持html5标签属性
  8. OpenStack securityGroup rule Set
  9. Python学习第二天----网络基础及操作系统简介(安装linux系统)
  10. order调用mdp
  11. NSTimer 的正确用法你真的知道吗?
  12. m2增长率曲线_中国m2历年数据曲线图_中国m2历年数据
  13. 基于ThinkPHP的图书馆管理系统 毕业设计-附源码311833
  14. Multisim基础 利用示波器观察二极管的正向电压
  15. 人脸识别门禁的那些“坑”,你中招了吗?
  16. vmware安装centos8网络配置并配置NAT子网(解决Unit network.service not found问题)
  17. 解读wlk成就系统系列之:我亲爱的小松鼠们
  18. 计算机安装内存配置,电脑内存条怎么安装 安装内存条的注意事项
  19. MapGIS产品锦囊——获取数据节点坐标信息三步“走”司马云司马云
  20. 决策树及集成模型 python实现

热门文章

  1. 如何在cmd命令提示符里打开Python
  2. epoll原理_如果这篇文章说不清epoll的本质,那就过来掐死我吧! (1)
  3. Uni-G/ The University of Glasgow (Uni-G) ECG Analysis Program
  4. Vue- Markdown 使用大全
  5. 嵌入式系——软件管理工程
  6. Missing artifact jdk.tools:jdk.tools:jar:1.8报错
  7. ajax注册判断怎么写,ajax之判断用户名是否被注册
  8. Spring 框架蕴含的设计思想
  9. Hive找出所有科目成绩都大于某一学科平均成绩的学生
  10. flink EventTime与Window