POJ3122 Pie(二分)

Posted aaronchang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了POJ3122 Pie(二分)相关的知识,希望对你有一定的参考价值。

题目链接:http://poj.org/problem?id=3122

题意:一堆人分蛋糕,每人蛋糕大小一样,求最大能分多少,蛋糕必须是整块整块的,不能两块拼一起。然后注意输入F个人最后要分F+1份。

思路:很简单很水,但是精度处理很恶心,wa了很多发,直接二分蛋糕的半径就行了

AC代码:

 1 #include<iostream>
 2 #include<vector>
 3 #include<cstdio>
 4 #include<algorithm>
 5 #include<cmath>
 6 #include<cstring>
 7 #include<queue>
 8 #include<map>
 9 #define p 3.14159265359
10 using namespace std;
11 const int maxn = 1e4+5;
12 const double eps = 1e-8;
13 double pie[maxn];
14 int N,F;
15 bool check(double x){
16     int cnt = 0;
17     for(int i = 0;i<N;i++){
18         cnt+=(int)(pie[i]*pie[i]/(x*x));//每次check一下是否满足大于F个 
19     }
20     return cnt>=F;
21 }
22 int main(){
23     int t;
24     scanf("%d",&t);
25     while(t--){
26         scanf("%d%d",&N,&F);
27         F+=1;
28         double MAX = 0.0;
29         for(int i = 0;i<N;i++){
30             scanf("%lf",&pie[i]);
31             MAX = max(MAX,pie[i]);//求出最大半径 
32         }
33         double l = 0, r = MAX*2;//左右区间 
34         double mid;
35         while(l+eps<r){
36             mid = (l+r)/2;
37             if(check(mid)){
38                 l = mid;
39             }
40             else{
41                 r = mid;
42             }
43         }
44         printf("%.4lf
",l*l*p);
45     }
46     return 0;
47 }

以上是关于POJ3122 Pie(二分)的主要内容,如果未能解决你的问题,请参考以下文章

POJ 3122-Pie(二分+精度)

poj3122 Pie

POJ3122-Pie-二分答案

POJ 3122 Pie二分答案

POJ3122 Pie

poj 3122 Pie