C 分饼

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 ≤ 10000: the number of pies and the number of friends.

• One line with N integers ri with 1 ≤ ri ≤ 10000: 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 oating 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

解题思路:这是一个分饼的问题,有n块不同口味的饼,分给F个朋友和自己,每个朋友拿到的饼必须大小一样,而且口味只能有一种,但是是形状可以不一样,求每个朋友能拿到的最大的饼的面积,这个题目有一个高精度问题需要注意,就是pi,要将它定义成acos(-1.0),这样才不会出现误差,用二分法可以逐步实现

程序代码:

#include <cstdio>
#include <cmath>
#include <algorithm>
using namespace std;
double pi=acos(-1.0);
double p[10000+10];
double sum,maxn;
int i,n,f,t,k,cnt;
double l,r,m;
int main()
{
    scanf("%d",&t);
    while(t--)
    {
      scanf("%d%d",&n,&f);
      f++;
      l=sum=0;
      for(i=0;i<n;i++)
      {
         scanf("%d",&k);
         p[i]=pi*k*k;
         l=max(p[i],l);
         sum+=p[i];
      }
      l=l/f;
      r=sum/f;
      while(l+0.00001<r)
      {
        m=(l+r)/2;
        cnt=0;
        for(i=0;i<n;i++)
          cnt+=(int)floor(p[i]/m);
        if(cnt<f) r=m;
        else l=m;
      }
      printf("%.4lf\n",l);
    }
    return 0;
}

时间: 2024-10-12 14:01:02

C 分饼的相关文章

poj3122 binary search 实数区间

Pie Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 14536   Accepted: 4979   Special Judge 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

国庆计划

创业初期,天使投资就是对创业团队和他们的一个伟大梦想的投资,并没有太多的财务数字和市场分析.不过,如果在创业的时候能够想得长远一点,那么这个团队就可以在“钱途”上走得比别人长远. 股权分配和行权计划 创 业者把公司建立起来后的第一件事,就是认准一个足够大的.成长性好的市场,针对这个市场组织一个好的团队.你得仔细研究一下这个市场,找出自己的独特性到 底在技术方面还是商业模式方面,而且一定要有创新.没有创新,你就没法跟人家竞争.这些都想好之后,你最好先自己做,能做多少做多少,做出一个模式后再出 去找

关于10月23日#10的六道题的心得与感悟

今天连着#9做到了#10.先说最近的#10吧. 第一题: 暴力模拟,没有什么算法或思想可言.就是锻炼代码能力,提高对细节的注意. 第二题: 一开始直接想到了前缀和,算出前缀和后,枚举起点终点,算出差值,判断是否能整除.结果可想而知,直接TLE.后来抓耳挠腮,几番思索无果,果断看题解,将前缀和加以处理,先用前缀和模上d,在遍历一次数组,当Mod == 0 或 当前Mod在之前出现过一次 , 就在结果上+1. 第三题:分饼.有f+1个人分n块饼吃,每块饼都是圆柱体,高全为1,给出每块饼的半径.求每个

逻辑研究

1.你让工人为你工作7天,回报是一根金条,这个金条平分成相连的7段,你必须在每天结束的时候给他们一段金条.如果只允许你两次把金条弄断,你如何给你的工人付费? 2.村子中有50个人,每人有一条狗.在这50条狗中有病狗(这种病不会传染).于是人们就要找出病狗.每个人可以观察其他的49条狗,以判断它们是否生病,只有自己的狗不能看.观察后得到的结果不得交流,也不能通知病狗的主人.主人一旦推算出自己家的是病狗就要枪毙自己的狗,而且每个人只有权利枪毙自己的狗,没有权利打死其他人的狗.第一天,第二天都没有枪响

图形统计简单示例

1). 加入 jar 包: Struts2中的包: struts2-jfreechart-plugin-2.3.15.3.jar jfreechart-1.0.13中的包: jcommon-1.0.16.jar jfreechart-1.0.13.jar iText-2.1.5.jar 2). 具体使用参见: struts-2.3.15.3-all/struts-2.3.15.3/docs/WW/docs/jfreechart-plugin.html I:在目标action中加入以下代码 pri

魅族、阿里联合搞的一场逗比发布秀 更似一场认爹仪式

预热了一个多月的魅族.阿里联合发布会有些潦草,从对赌到联姻,一波未平一波又起的小道消息让舆论高潮迭起,而最终的发布会却让不少围观群众大失所望,只能说阿里公关做的实在太好,所以让实际合作的内容看起来很是逗比.***吹的厉害,实干时却不行了,这怎能不让期待一场大片的围观群众失望. 此次联姻间接证实了魅族接受阿里投资 关于之前魅族与阿里之间逗比的对赌到联姻发展情节,这里就不做回顾了,叫好也行,不削也罢,人家传播效果有了,闹剧也已经过去了,不过还是要插一句,相比双方在公关上的双簧对唱,发布会的内则显得逊

初试二分法

二分原理 在高中方程根这一相关内容中我们就接触过二分法:二分原理并不是很陌生 就是在一个大范围内每次根据数据不断折半缩小范围,找到近似解.(不再过多赘述) Pie Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 17735 Accepted Submission(s): 6215 Problem Description My birthday

JFreeChart工具类

需要的jar包: jfreechart-1.0.17.jarjcommon-1.0.24.jar (jfreechart一般只要1.0系列的都可以,jcommon一般任何版本都可以) 效果: 代码: JfreechartUtil: package jfreeChart; import java.awt.Color; import java.awt.Font; import java.io.File; import java.io.FileOutputStream; import java.tex

4价格

计划经济:三个不可逾越的根本障碍--人际效用不可比较.数据不可得.奖惩很难恰如其分. 1. 人际效用不可比较 ? 举一个简单的例子,世界上有10位富人和1位穷人,我们问了10位富人,他们都说苹果比红薯好吃,但是能不能因此就说苹果比红薯重要呢?不能.因为对于哪位穷人来说,红薯可能要比苹果重要得多,因为他需要用红薯解决温饱问题.可见个人的偏好,是不能做横向比较的.也就是说,人际效用不可比较. ? 正因为这个原因,人们会看到一个有趣的现象,那就是个人和企业的高度计划,与整个社会的无计划,这两种现象是可