最后输出的时候用%.4f\n就通过了,而用%.4f\n就过了,不知道为什么,我的pi和mid用的是double定义的!求大佬指导!
//AC代码
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
using namespace std;
const double pi=acos(-1.0);
int main(){
int q;
scanf("%d",&q);
int n;
int m;
while(q--){
double a[10005];
scanf("%d%d", &n,&m);
m++;
double sum=0;
for(int i=1;i<=n;i++){
scanf("%lf", &a[i]);
a[i]*=a[i];
sum+=a[i];
}
double l=0;
double r=sum/m;
double mid=0;
while((r-l)>0.0000001){
int ans=0;
mid=(l+r)/2;
for(int i=1;i<=n;i++){
ans+=int(a[i]/mid);
}
if(ans>=m)
l=mid;
else
r=mid;
}
printf("%.4f\n",mid*pi);
}
return 0;
}
//WA代码
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
using namespace std;
const double pi=acos(-1.0);
int main(){
int q;
scanf("%d",&q);
int n;
int m;
while(q--){
double a[10005];
scanf("%d%d", &n,&m);
m++;
double sum=0;
for(int i=1;i<=n;i++){
scanf("%lf", &a[i]);
a[i]*=a[i];
sum+=a[i];
}
double l=0;
double r=sum/m;
double mid=0;
while((r-l)>0.0000001){
int ans=0;
mid=(l+r)/2;
for(int i=1;i<=n;i++){
ans+=int(a[i]/mid);
}
if(ans>=m)
l=mid;
else
r=mid;
}
printf("%.4lf\n",mid*pi);
}
return 0;
}
求指正!!!
补充
好像懂了…
图片来自博主 阳光大男孩!
感谢,提醒自己和各位!