二分法的主题思路就是逐步逼近,所以这道题的思路自然一目了然,做题思路也是...

本题大意:题主过生日,它买了N块半径为R[ i ],高为1的圆柱形蛋糕,现在他要将这N块蛋糕等分给F + 1个人,为了好看分出来的每块蛋糕必须是从一整块上分割下来的,体积一样形状不限。

本题思路:那就是求那个最大的平均值啦,二分,找出最大值和最小值,二分逼近判断,就ok。

  这题卡精度的一批,double二分,老套路二分100次精度异常高,什么都不用管直接AC,我一开始也wa了几次,原因时因为check函数内部实现,我就把check里的除法向下取整改为了加法,就wa,不明白,懵懂无知,有大佬指点一下?

参考代码:

 #include <cstdio>
#include <cmath>
#include <algorithm>
#define mid ((double)(l + r) / 2)
using namespace std; const double pi = acos(-1.0);
const int maxn = + ;
int N, F;
int R[maxn];
double V[maxn]; bool cmp(const double &a, const double &b) {
return a > b;
} double Getarea(int r) {
return (double)(pi * r * r);
} // bool check(double x) {
// int num = 0;
// for(int i = 0; i < N; i ++) {
// double cap = V[i];
// while(cap >= x) {
// num ++;
// cap -= x;
// }
// if(num >= F + 1) return true;
// }
// return num >= F + 1;
// } bool check(double x) {
int sum = ;
for(int i = ; i < N; i ++)
sum += (int)(V[i] / x);
return sum >= F + ;
} int main() {
int t;
double Max = ;
scanf("%d", &t);
while(t --) {
scanf("%d %d", &N, &F);
for(int i = ; i < N; i ++) {
scanf("%d", &R[i]);
V[i] = Getarea(R[i]);
Max = max(Max, V[i]);
}
double l = , r = double(Max);
for(int i = ; i < ; i ++) {
if(check(mid)) l = mid;
else r = mid;
}
printf("%.4f\n", l);
}
return ;
}

POJ-3122.Pie(二分法最大化平均值)的更多相关文章

  1. poj 3111 K Best 最大化平均值 二分思想

    poj 3111 K Best 最大化平均值 二分思想 题目链接: http://poj.org/problem?id=3111 思路: 挑战程序竞赛书上讲的很好,下面的解释也基本来源于此书 设定条件 ...

  2. POJ 3111 K Best(最大化平均值)

    题目链接:click here~~ [题目大意]有n个物品的重量和价值各自是Wi和Vi.从中选出K个物品使得单位重量的价值最大,输出物品的编号 [解题思路]:最大化平均值的经典.參见click her ...

  3. POJ 3111 K Best 最大化平均值 [二分]

    1.题意:给一共N个物品,每个物品有重量W,价值V,要你选出K个出来,使得他们的平均单位重量的价值最高 2.分析:题意为最大化平均值问题,由于每个物品的重量不同所以无法直接按单位价值贪心,但是目标值有 ...

  4. POJ - 3122 Pie(二分)

    http://poj.org/problem?id=3122 题意 主人过生日,m个人来庆生,有n块派,m+1个人(还有主人自己)分,问每个人分到的最大体积的派是多大,PS每 个人所分的派必须是在同一 ...

  5. POJ 3122 Pie 二分枚举

    题目:http://poj.org/problem?id=3122 这个题就好多了,没有恶心的精度问题,所以1A了.. #include <stdio.h> #include <ma ...

  6. POJ 3122 Pie

    题目大意: 给出n个pie的直径,有f+1个人,如果给每人分的大小相同(形状可以不同),每个人可以分多少.要求是分出来的每一份必须出自同一个pie,也就是说当pie大小为3,2,1,只能分出两个大小为 ...

  7. POJ 3122 Pie(二分+贪心)

    Pie Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 22684   Accepted: 7121   Special Ju ...

  8. POJ 3122 Pie (贪心+二分)

    My birthday is coming up and traditionally I'm serving pie. Not just one pie, no, I have a number N ...

  9. POJ 3122 Pie【二分答案】

    <题目链接> 题目大意: 将n个半径不一但是高度为1的蛋糕分给 F+1个人,每个人分得蛋糕的体积应当相同,并且需要注意的是,每个人分得的整块蛋糕都只能从一个蛋糕上切下来,而不是从几个蛋糕上 ...

随机推荐

  1. java File获取字节流

    /*文件64位编码*/ public static void main(String[] args) { byte[] fileByte = toByteArray(newFile); String ...

  2. HTML与CSS中的定位个人分享

    定位 static - 默认值 (几乎不用,了解就可以) absolute - 绝对定位,不为元素预留空间,脱离文档流: 如果当前元素的父级元素是<body>元素的话 -> 是相对于 ...

  3. java -cp与java -jar的区别

    java -cp 和 -classpath 一样,是指定类运行所依赖其他类的路径,通常是类库,jar包之类,需要全路径到jar包,window上分号“;”格式:java -cp .;myClass.j ...

  4. Python网络爬虫数据解析的三种方式

    request实现数据爬取的流程: 指定url 基于request发起请求 获取响应的数据 数据解析 持久化存储 1.正则解析: 常用的正则回顾:https://www.cnblogs.com/wqz ...

  5. 如何用 Jmeter 获取 Cookie

    如何用 Jmeter 获取 Cookie 1.Jmeter 安装目录bin文件加下jmeter.properties文件修改,搜索CookieManager.save.cookies= 将Cookie ...

  6. for-in语句和with语句、break和continue语句

    for-in语句 for-in语句是一种精准迭代语句,可以用来枚举对象的属性,用以遍历一个对象的全部属性. for…in声明用于对数组或者对象的属性进行循环操作: for…in循环中的代码每执行一次, ...

  7. 12 Spring Boot密码加密算法

  8. mybatis配eclise模板,mybatis快速生成模板

    eclipse中mybatis得mapper文件不提示(mybatis-3-mapper.dtd,mybatis-3-config.dtd) 1.下载该文件到你的硬盘文件夹下 2.windows -- ...

  9. 【bzoj1179】[Apio2009]Atm

    *题目描述: *输入: 第一行包含两个整数N.M.N表示路口的个数,M表示道路条数.接下来M行,每行两个整数,这两个整数都在1到N之间,第i+1行的两个整数表示第i条道路的起点和终点的路口编号.接下来 ...

  10. Last Defence

    Given two integers A and B. Sequence S is defined as follow: • S0 = A •S1 = B • Si = |Si−1 − Si−2| f ...