zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    ZOJ 2770 Burn the Linked Camp 差分约束
    作业04 一个简单的扑克牌游戏
    C++友元
    ZOJ 3645高斯消元
    CodeForces 55D 数位统计
    03类的设计和使用
    HDU 4522
    POJ 2559单调栈
    PL/SQL REPORT 开发模拟登陆
    修改报表心得
  • 原文地址:https://www.cnblogs.com/AaronChang/p/12171854.html
Copyright © 2011-2022 走看看