您的位置:首页 > 其它

HDOJ1696 Pie【二分】----武科大ACM暑期集训队选拔赛8题

2012-05-09 22:22 330 查看
开始遇到题目,以为就是简单的计算sum然后除f+1呢。。。惭愧了~

二分法求线性方程的解、折半查找这些代码都写过,不过那些都是教科书上的东西,今天自己做了这道题,才发现,原来这就是二分。。。

[align=center]Problem : 1969 ( Pie ) Judge Status : Accepted
RunId : 5918963 Language : C Author : qq1203456195
Code Render Status : Rendered By HDOJ C Code Render Version 0.01 Beta
[/align]

#include <stdio.h>
#include <math.h>
#define  PI 3.1415926535897931
double v[10001];
int n,f;
int test(double x)
{
int s=0,i;
for (i=0;i<n;i++)
s+=(int)(v[i]/x);
return s>=f?1:0;
}
int main()
{
int cas,i,r;
double sum,max;
double left,right,mid;
scanf("%d",&cas);
while (cas--)
{
scanf("%d%d",&n,&f);
f+=1;
sum=0;
for (i=0;i<n;i++)
{
scanf("%d",&r);
v[i]=(double)PI*r*r;
sum+=v[i];
}
max=sum/f;
left=0.0;
right=max;
while ((right-left)>1e-6)
{
mid=(left+right)/2.0;
if (test(mid))
left=mid;
else
right=mid;
}
printf("%.4lf\n",mid);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: