33 34 3 31 24510 51 4 2 3 4 5 6 5 4 2Sample Output25.13273.141650.2655思路:二分法,但此题对精度要求很高#include<stdio.h>#include<cstdlib>#include<math.h>#define pi acos(-1.0)//3.1415926过不了,此题对精度要求很高#define exp 1e-7//时间复杂度的大小也与精度的大小有关int N,F;using namespace std;int str[10005];int judge(double mid){ long long sum=0; for(int i=1;i<=N;i++) sum+=(int)(1.0*str[i]*str[i]*pi/mid); return sum>=(F+1)? 1:0;//关键是在等于时候的判断}int main(){ //freopen("e://in.txt","r",stdin); int V; scanf("%d",&V); while(V--) { double sum=0.0; scanf("%d%d",&N,&F); for(int i=1;i<=N;i++) { scanf("%d",&str[i]); sum+=1.0*str[i]*str[i]*pi; } sum/=1.0*(F+1); double left=0.0,right=sum,mid; while(right-left>=exp) { mid=(left+right)/2.0; if(judge(mid)) left=mid; else right=mid; } PRintf("%.4lf/n",left); }}总结:1.pi =acos(-1.0),3.1415926不够精确2.精度也影响着时间复杂度
新闻热点
疑难解答