題目的整體思想就是二份答案,將復雜度降低。
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
#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
else14
return 0;15
}16
double abs(double ll)17


{18
if(ll<0)19
return ll*(-1);20
else21
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
else47

{48
max=mid;49
}50
}51
printf("%.4lf\n",mid);52
}53
return 0;54
}55


