您的位置:首页 > 其它

hdu 1969 pie

2013-01-03 22:17 211 查看
二分,细心细心再细心,精度问题。

//freopen("C:\\Documents and Settings\\Administrator\\桌面\\input.txt","r",stdin);
//freopen("input.txt",  "r", stdin);  //读数据
//	freopen("output.txt", "w", stdout); //注释掉此句则输出到控制台
#include<stdio.h>
#include<math.h>
#define NUM 10005
double PI = acos(-1.0);
double vol[NUM];
int nFriend,nPie;
int avail(double x)
{
int ans=0;
for(int i=0;i<nPie;i++){
ans+=(int)(vol[i]/x);
}
if(ans>=nFriend)
return 1;
else return 0;
}

int main()
{
int cases,i,ri;
double left,right,mid,maxVol;
//freopen("C:\\Documents and Settings\\Administrator\\桌面\\input.txt","r",stdin);
scanf("%d",&cases);

while(cases--){
maxVol=0;
left=0.0;
scanf("%d%d",&nPie,&nFriend);
for(i=0;i<nPie;i++){
scanf("%d",&ri);
vol[i]=PI*ri*ri;
maxVol+=vol[i];
}
nFriend++;//算上自己
right=maxVol/nFriend;
while((right-left)>1e-6){
mid=(left+right)/2;
if(avail(mid)==1){
left=mid;//尝试是否能更大
}else
right=mid;//只能试看小一点的
}
printf("%.4lf\n",mid);
}
return 0;
}


 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  HDU