HDU1969 PIE 二分查找
2014-07-26 22:00
274 查看
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1969
题目意思:有n个块饼和M+1个人要分饼,且每人一块,饼不能拼接,要求每人分得的最大的饼的面积
思路:二分,先用总的饼的面积 / 人数 = 理论上最大面积,取为上界high,再求一个mid ,一直到循环退出,不能在中途找到时结束循环
if(饼能分成M+1份)
{ left = mid }
else { right = mid }
题目意思:有n个块饼和M+1个人要分饼,且每人一块,饼不能拼接,要求每人分得的最大的饼的面积
思路:二分,先用总的饼的面积 / 人数 = 理论上最大面积,取为上界high,再求一个mid ,一直到循环退出,不能在中途找到时结束循环
if(饼能分成M+1份)
{ left = mid }
else { right = mid }
#include<cstring> #include<string> #include<fstream> #include<iostream> #include<iomanip> #include<cstdio> #include<cctype> #include<algorithm> #include<queue> #include<map> #include<set> #include<vector> #include<stack> #include<ctime> #include<cstdlib> #include<functional> #include<cmath> using namespace std; #define PI acos(-1.0) #define MAXN 100005 #define eps 1e-7 #define INF 0x7FFFFFFF #define ff sqrt(5.0) double val[100005]; int n,m,t; int check(double x) { int sum=0; for(int i = 0;i < n;i++) { sum += val[i] / x; } if(sum >= m + 1) return 1; else return 0; } double mid,r,l,maxval; int main() { scanf("%d",&t); while(t--) { scanf("%d%d",&n,&m); maxval = 0; for(int i = 0;i < n; i++) { scanf("%lf",&val[i]); val[i] = val[i] * val[i] * PI; maxval += val[i]; } mid = maxval / (m + 1); r = mid; l = 0.0; while(r - l > 1e-7) { if(check(mid)) { l = mid; } else { r = mid; } mid=(l + r) / 2.0; } printf("%.4lf\n",mid); } return 0; }
相关文章推荐
- UVALive3635 UVA12097 POJ3122 HDU1969 Pie【二分查找】
- poj 3122&&hdu1969 Pie(二分)
- poj 3122 Pie (二分查找)
- HOJ 2615 Pie ---------------二分查找的运用
- 二分查找 Problem 1003 Pie
- hdu 1969 Pie(二分查找)
- HDU 1969 Pie (二分查找)
- hdu1969 pie【二分】
- hdu 1969 Pie(二分查找)
- HDU1969:Pie(二分 + 贪心)
- 【二分查找】-HDU-1969-Pie
- HDU1969:Pie(二分)
- 二分查找——D:Pie 解题报告
- HDU 1969 Pie(二分查找)
- poj - 3122 Pie (二分查找)
- Pie(POJ--3122【二分查找】
- UVALive - 3635 Pie(二分答案查找)
- 【hoj】2651 pie 二分查找
- 二分查找 hdu1969 pie
- 【POJ】3122 Pie [二分查找]