模板:三分法
十分累所以水一波三分模板
https://www.luogu.org/problemnew/show/P3382
其实二分三分做都可以
接下来是代码
这是二分的做法
1 #include<cstdio> 2 using namespace std; 3 const double eps=1e-6; 4 int n; 5 double a[15], L, R, mid; 6 inline double f(double x){ 7 double ans=0; 8 for(int i=n; i>=0; i--) ans=ans*x+a[i]; 9 return ans; 10 } 11 int main(){ 12 scanf("%d%lf%lf",&n,&L,&R); 13 for(int i=n; i>=0; i--) scanf("%lf",&a[i]); 14 while(R-L>=eps){ 15 mid=(L+R)/2.0; 16 if(f(mid-eps)>f(mid)) R=mid; 17 else L=mid; 18 } 19 printf("%.5lf\n",L); 20 return 0; 21 }
接下来是三分
1 #include<cstdio> 2 using namespace std; 3 const double eps=1e-6; 4 int n; 5 double a[15], L, R, mid1, mid2, mid; 6 inline double f(double x){ 7 double ans=0; 8 for(int i=n; i>=0; i--) ans=ans*x+a[i]; 9 return ans; 10 } 11 int main(){ 12 scanf("%d%lf%lf",&n,&L,&R); 13 for(int i=n; i>=0; i--) scanf("%lf",&a[i]); 14 while(R-L>=eps){ 15 mid=(R-L)/3.0; 16 mid1=L+mid; 17 mid2=R-mid; 18 if(f(mid1)>f(mid2)) R=mid2; 19 else L=mid1; 20 } 21 printf("%.5lf\n",L); 22 return 0; 23 }
"Hello World!"