POJ 3122 二分

来源:互联网 发布:关于费米估算法的书 编辑:程序博客网 时间:2024/06/11 05:43

大致题意:
就是公平地分披萨pie
我生日,买了n个pie,找来f个朋友,那么总人数共f+1人
每个pie都是高为1的圆柱体,输入这n个pie的每一个尺寸(半径),如果要公平地把pie分给每一个人(就是所有人得到的pie尺寸一致,但是形状可以不同),而且每个人得到的那份pie必须是从同一个pie上得到的
后面那句很重要,
就是说如果有3个pie, 尺寸分别为1,2,3,
如果要给每人尺寸为2的pie,那么最多分给2个人,而不是3个人
因为第一个pie尺寸为1,小于2,扔掉
第二个pie尺寸为2,等于2,刚好分给一个人
第三个pie尺寸为3,切出尺寸为2的一份,分给一个人,剩下的尺寸为1的就扔掉

千万不要陷入 (1+2+3)/2=3人的误区,这样就变成求平均了
(转自小優YoU的blog http://blog.csdn.net/lyy289065406/article/details/6648565)

就这么随便搞一搞就AC了。

// by SiriusRen#include <cstdio>#include <algorithm>using namespace std;double pi=3.1415926535898,l,r,a[10005];int cases,n,f;int main(){    scanf("%d",&cases);    while(cases--){        l=r=0;        scanf("%d%d",&n,&f);        for(int i=1;i<=n;i++)scanf("%lf",&a[i]),a[i]*=a[i],r=max(r,a[i]);        while(r-l>=1e-6){            int jy=0;            double mid=(l+r)/2.0;            for(int i=1;i<=n;i++)jy+=(int)a[i]/mid;            if(jy>f)l=mid;            else r=mid;        }        printf("%.4lf\n",r*pi);    }}

这里写图片描述

0 0
原创粉丝点击