題目的整體思想就是二份答案,將復(fù)雜度降低。
1
#include<stdio.h>
2
#include<math.h>
3
double ri[10005];
4
int judge(double m,int pie_n,int friend_n,double *p)
5

{
6
int i,sum=0;
7
for(i=1;i<=pie_n;i++)
8
{
9
sum+=int((p[i]*acos(-1))/m);
10
}
11
if(sum>friend_n)
12
return 1;
13
else
14
return 0;
15
}
16
double abs(double ll)
17

{
18
if(ll<0)
19
return ll*(-1);
20
else
21
return ll;
22
}
23
int main()
24

{
25
int t,pie_n,friend_n,i;
26
scanf("%d",&t);
27
while(t--)
28
{
29
double mm=0;
30
scanf("%d%d",&pie_n,&friend_n);
31
for(i=1;i<=pie_n;i++)
32
{
33
scanf("%lf",&ri[i]);
34
ri[i]=ri[i]*ri[i];
35
if(ri[i]>mm)
36
mm=ri[i];
37
}
38
double min=0,max=mm*acos(-1),mid;
39
while(abs(max-min)>0.000005)
40
{
41
mid=(max+min)/2;
42
if(judge(mid,pie_n,friend_n,ri))
43
{
44
min=mid;
45
}
46
else
47
{
48
max=mid;
49
}
50
}
51
printf("%.4lf\n",mid);
52
}
53
return 0;
54
}
55