不算难的一道二分。。各种玄学错误。。eps小了T,大了WA。。最后G++改成C++提交就AC了。。
#include<iostream> #include<cstdio> #include<cstring> #include<cmath> #include<cstdlib> #include<algorithm> using namespace std; const double eps=1e-6; //const double pi=acos(-1.0); const double pi = 3.1415926535897932; int N,F; double a[10005]; double s[10005]; double sum,avg; bool ok(double x) { int cnt=0; for(int i=0;i<N;i++) cnt+=(int)(s[i]/x); return cnt>=F+1; } double search(double l,double r) { while(r-l>eps) { double mid=(l+r)/2; if(ok(mid)) l=mid; else r=mid; } return (l+r)/2; } int main() { // ios_base::sync_with_stdio(false); int T;scanf("%d",&T); // int T;cin>>T; while(T--) { // cin>>N>>F; scanf("%d%d",&N,&F); sum=0; for(int i=0;i<N;i++) { // cin>>a[i]; scanf("%lf",&a[i]); s[i]=a[i]*a[i]; sum+=s[i]; } avg=sum/(F+1); // cout<<search(0,avg)<<endl; printf("%.4lf\n",search(0,avg)*pi); } }