zoukankan      html  css  js  c++  java
  • POJ3122-Pie-二分答案

    有N个派,F+1个人,每个人分到的体积要相等,而且每个人只能有一块派。

    二分答案,对于一个mid,对每个派进行检测,尽量的多分,然后如果份数比F+1大,说明mid可以更大,就把mid给low。注意份数等于F+1时,也要向大的地方靠近。

    二分答案的题都是这样的套路。

    这种题精度是一个大坑。总是在wa和T之间徘徊。。。前几次wa都是PI写的太短了。

    还要注意 double输入用%lf,输出用%f。

    #include <cstdio>
    #include <algorithm>
    #include <cstring>
    
    using namespace std;
    
    const double esp = 1e-6;
    const double PI = 3.14159265359;
    
    int T,N,F,radii[10010];
    
    int main()
    {
        scanf("%d",&T);
        while(T--)
        {
            scanf("%d%d",&N,&F);
            F++;
            double low = 0,high=0,mid;
    
            for(int i=0;i<N;i++)
            {
                scanf("%d",&radii[i]);
                high = max(high,radii[i]*radii[i]*PI);
            }
    
            while(high-low>esp)
            {
                int piece = 0;
                mid = (low+high)/2;
                for(int i=0;i<N;i++)
                {
                    double v = radii[i]*radii[i]*PI;
                    int cnt = 0;
                    while((cnt+1)*mid < v) cnt++;
                    piece += cnt;
                }
    
                //printf("low=%f high=%f piece=%d
    ",low,high,piece);
                if(piece >= F) low = mid;
                else high = mid;
            }
            printf("%.4f
    ",mid);
        }
    }
  • 相关阅读:
    Masonry
    数据解析
    UIImage 两种初始化的区别
    GCD
    数据处理之文件读写
    关注即时通讯
    跳转appStore评分
    iOS 9 Safari广告拦截插件
    Cocoapods的安装以及使用
    iOS中Block的基础用法
  • 原文地址:https://www.cnblogs.com/helica/p/5173786.html
Copyright © 2011-2022 走看看