zoukankan      html  css  js  c++  java
  • HDU1969(二分搜索)

    题目即为分饼,但是每个人要分到一样大,切只能是一整块,不能拼凑在一起,求每人分到最大的体积。。。。安神说我没真正理解二分搜索,确实,二分真的很神通广大,在这个题目我就死脑筋没转过弯,。。由于给的饼的数目和类型不确定。。。有些饼是可以舍弃的。。在这个处理上,用f>=V[I]/MID作为二分的条件最好了,即判断能不能切出这么多块MID体积大的饼出来。。。。其实这就是二分的思想,不要死脑筋。。二分可以变换很多形式,控制条件不同,达到不同的效果。。。这才是要去领会二分的精髓。

    话说代码又是参考某位大神的。

    #include <iostream>
    #include <cstdio>
    #include <cmath>
    
    using namespace std;
    double pi=acos(-1.0);
    int n,f,r;
    double v[11000],value=0.0;
    
    bool test(double x)
    {
      int sum=0;
      for (int k=0;k<n;k++)
       {sum+=(int)(v[k]/x);}
      if (sum<f+1) return false;
       else return true;
    }
    int main()
    {
        int t;
        cin>>t;
        while (t--)
        {
            cin>>n>>f;
            for (int i=0;i<n;i++)
            {
                cin>>r;
                v[i]=r*r*pi;
                value+=v[i];
            }
            double uu=value/(f+1);
            double le=0.0,ri=uu,mid;
            while((ri-le)>1e-6)
            {
                mid=(ri-le)/2+le;
                if (test(mid)) le=mid;
                else ri=mid;
            }
            printf("%.4f\n",mid);
        }
        return 0;
    }
  • 相关阅读:
    2、变量
    1、基本的数据类型
    jenkins入门
    我的Python基础笔记
    jmeter测试手机app
    Python:字典
    Python:元组
    Python:列表
    Python:函数
    H3C-L2TP
  • 原文地址:https://www.cnblogs.com/kkrisen/p/2876442.html
Copyright © 2011-2022 走看看