• HDUOJ PIE二分查找


    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <cmath>
    #include <cstdlib>
    #include <algorithm>
    #include <vector>
    #include <stack>
    #include <queue>
    #include<cassert>
    #include<set>
    using namespace std ;
    #ifdef DeBUG
    #define bug assert
    #else
    #define bug //
    #endif
    #define eps 1e-6
      int m,n;
      double pie[11000];
    bool test(double x)//判断是否每个都分成出x体积大的蛋糕的块数>=人数,=人数那最好了^_^
    {
     int sum=0;
     for(int i=0;i<m;i++)
     sum+=(int)(pie[i]/x);
     if(sum>=(n+1))
     return true;
     else
     return false;
    }
    int main()
    {
     #ifdef DeBUG
      freopen("C:\Users\Sky\Desktop\1.in","r",stdin);
     #endif
     int T;
     const double PI=acos(-1.0);
     scanf("%d",&T);
     while(T--)
     {
      int i,j,k;
      int r;
      double maxx=0.0;
      scanf("%d%d",&m,&n);
      for(i=0;i<m;i++)
      {
       scanf("%d",&r);
       pie[i]=(r*r*PI);
       maxx+=pie[i];
      }
      double low=0.0,high=maxx/(n+1),mid;
      while(high-low>eps)
      {
       mid=(high+low)/2;
       if(test(mid))
       low=mid;
       else
       high=mid;
      }
      printf("%.4lf ",mid);
     }
     
     return 0;
    }

    还有个代码就都贴上吧

    #include<iostream>
    #include<cstdio>
    #include<cmath>

    using namespace std;
    const double eps=1e-6;
    const double PI=acos(-1.0);
    int p[10000];

    int main()
    {//freopen("C:\Users\Sky\Desktop\1.in","r",stdin);
        int t,n,m,cnt;
        double low,mid,up;
        cin>>t;
        while(t--)
        {
            cin>>n>>m;
            m++;
            low=up=0;
            for(int i=0;i<n;i++)
            {
                scanf("%d",p+i);
                p[i]*=p[i];
                if(up<p[i])
                    up=p[i];
            }
            while(up-low>=eps)
            {
                mid=(low+up)/2;
                cnt=0;
                for(int i=0;i<n;i++)
                    cnt+=(int)(p[i]/mid);
                if(cnt<m)
                    up=mid-eps;
                else if(cnt>=m)//此处很重要
                    low=mid+eps;
            }
            printf("%.4lf ",mid*PI);
        }
        return 0;
    }

  • 相关阅读:
    超全面的.NET GDI+图形图像编程教程
    VS插件开发
    Vue.js 学习笔记 第7章 组件详解
    Vue.js 学习笔记 第6章 表单与v-model
    Vue.js 学习笔记 第5章 内置指令
    Vue.js 学习笔记 第4章 v-bind 及 class与style绑定
    Vue.js 学习笔记 第3章 计算属性
    Vue.js 学习笔记 第2章 数据绑定和第一个Vue应用
    Vue.js 学习笔记 第1章 初识Vue.js
    Microsoft Visual Studio 2017 for Mac Preview 下载+安装+案例Demo
  • 原文地址:https://www.cnblogs.com/Skyxj/p/3183996.html
Copyright © 2020-2023  润新知