POJ 3122 Pie( 二分搜索 )
**链接:****传送门 **
题意:一个小朋友开生日派对邀请了 F 个朋友,排队上有 N 个 底面半径为 ri ,高度为 1 的派,这 F 个朋友非常不友好,非得“平分”这些派,每个人都不想拿到若干快小派,只想拿到一整块切好的派,当然形状可以不同,但是体积必须相同他们才能友好的玩下去......,现在求每个人能拿到的最大的派的体积是多少。
思路:
- 1.若N > F + 1 ,则从 N 个派中选出 F + 1 个比较大的,“平分”情况自然是这 F + 1 个最小的派
- 2.若N <= F + 1 ,就二分搜索一个能平分最大派的 S ,判断按照半径 S 分割这 N 个派能不能凑够 F + 1 个人的
/*************************************************************************
> File Name: poj3122.cpp
> Author: WArobot
> Blog: http://www.cnblogs.com/WArobot/
> Created Time: 2017年05月05日 星期五 16时28分37秒
************************************************************************/
#include<cstdio>
#include<cmath>
#include<cstdio>
#include<algorithm>
#include<iostream>
#include<iomanip>
using namespace std;
#define pi 3.1415926535898
#define eps 1e-5
#define dou double
#define maxn 10010
int N,F,t;
int ri[maxn];
dou S[maxn];
bool check(double s1){
int cnt = 0;
for(int i=0;i<N;i++){
cnt += (int)(S[i]/s1);
}
if(cnt >= F+1) return 1;
else return 0;
}
int main(){
scanf("%d",&t);
while(t--){
scanf("%d%d",&N,&F);
dou max_S = 0;
for(int i=0;i<N;i++){
scanf("%d",ri+i);
S[i] = ri[i]*ri[i]*pi*1.0;
max_S = max(max_S,S[i]);
}
if(N>F+1){
sort(ri,ri+N);
dou ans = ri[N-(F+1)]*ri[N-(F+1)]*1.0*pi;
cout<<fixed<<setprecision(4)<< ans <<endl;
}else{
// 二分找最大面积
dou l = 0.0 , r = max_S+10 , mid;
while(r-l>eps){
mid = (l+r)/2;
if(check(mid)) l = mid;
else r = mid;
}
dou ans = (l+r)/2;
cout<<fixed<<setprecision(4)<< ans <<endl;
}
}
return 0;
}
POJ 3122 Pie( 二分搜索 )的更多相关文章
- POJ - 3122 Pie(二分)
http://poj.org/problem?id=3122 题意 主人过生日,m个人来庆生,有n块派,m+1个人(还有主人自己)分,问每个人分到的最大体积的派是多大,PS每 个人所分的派必须是在同一 ...
- POJ 3122 Pie 二分枚举
题目:http://poj.org/problem?id=3122 这个题就好多了,没有恶心的精度问题,所以1A了.. #include <stdio.h> #include <ma ...
- POJ 3122 Pie
题目大意: 给出n个pie的直径,有f+1个人,如果给每人分的大小相同(形状可以不同),每个人可以分多少.要求是分出来的每一份必须出自同一个pie,也就是说当pie大小为3,2,1,只能分出两个大小为 ...
- POJ 3122 Pie(二分+贪心)
Pie Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 22684 Accepted: 7121 Special Ju ...
- POJ 3122 Pie (贪心+二分)
My birthday is coming up and traditionally I'm serving pie. Not just one pie, no, I have a number N ...
- POJ 3122 Pie【二分答案】
<题目链接> 题目大意: 将n个半径不一但是高度为1的蛋糕分给 F+1个人,每个人分得蛋糕的体积应当相同,并且需要注意的是,每个人分得的整块蛋糕都只能从一个蛋糕上切下来,而不是从几个蛋糕上 ...
- POJ 3122 Pie 二分答案
题意:给你n个派,每个派都是高为一的圆柱体,把它等分成f份,每份的最大体积是多少. 思路: 明显的二分答案题-- 注意π的取值- 3.14159265359 这样才能AC,,, //By Sirius ...
- 【POJ 3122】 Pie (二分+贪心)
id=3122">[POJ 3122] Pie 分f个派给n+1(n个朋友和自己)个人 要求每一个人分相同面积 但不能分到超过一个派 即最多把一整个派给某个人 问能平均分的最大面积 二 ...
- poj 3122 (二分查找)
链接:http://poj.org/problem?id=3122 Pie Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 1 ...
随机推荐
- C语言基础 (12) 文件的操作 FILE
课程回顾 结构体基本操作: 结构体类型的定义 // struct为关键字 Stu为自定义标识符 // struct Stu才是结构体类型 // 结构体成员不能在定义类型时赋值 struct Stu { ...
- [LUOGU2730] 魔板
搜索水题.因为只有8个数,排列一共有40320种,直接bfs,判重就行了. 但是判重的时候直接用8进制表示的话要88的bool数组.这种操作太low了,于是我们可以用康托展开,降成8!. 康托展开其实 ...
- Ansible常见问题处理
1.ansible all -m ping报错,信息如下: [WARNING]: log file at /var/log/ansible.log is not writeable and we ca ...
- CF789C. Functions again
/* CF789C. Functions again http://codeforces.com/contest/789/problem/C 水题 题意:求数组中的连续和的最大值 */ #includ ...
- poj 2914&&hdu 3002 全局最小割Stoer-Wagner算法模板
#include<stdio.h> #include<string.h> #include<iostream> #define inf 0x3fffffff #de ...
- chrome隐身模式无法播放flash的解决办法
困扰很多天的chrome无法播放flash的问题终于解决了 因为之前一直用隐身模式,一直不能播放flash,重装chrome,重装插件,还是不行 结果今天发现正常模式是可以播放的,所以找了一下chro ...
- 在不同的浏览器下FORM及它的小伙伴们默认样式的CSS属性值是不全然一致
我们一般在定义CSS样式的时候都须要定义去掉HTML标签默认样式的CSS,原因是在不同的浏览器以下它们的表现出来的默认样式不全然一致,我们要保证在不同的浏览器下它们能正常显示出我们想要达到的预期效果, ...
- 怎样在Java中运行Hive命令或HiveQL
这里所说的在Java中运行Hive命令或HiveQL并非指Hive Client通过JDBC的方式连接HiveServer(or HiveServer2)运行查询,而是简单的在部署了HiveServe ...
- Windows环境下msysgit安装git flow
git flow是git的一个扩展集,它基于Vincent Driessen的分支模型,能够用来简化代码的版本号公布流程. 本文讲述怎样为msysgit安装git flow. 下载getopt.exe ...
- win7-32虚拟机安装
前置条件:安装好VMware-workstation 一.本人本机win7—32位 准备win7_32位镜像文件GSP1RMCULFRER_CN_DVD.iso 新建一个文件夹,将它保存在我们的新建文 ...