三分模板 上凸形
https://www.luogu.com.cn/problem/P3382
1 #include<bits/stdc++.h> 2 using namespace std; 3 const int maxn=20; 4 double a[maxn]; 5 int n; 6 double check(double x) 7 { 8 double ans=0; 9 for(int i=0;i<=n;i++){ 10 double tmp=1; 11 for(int j=1;j<=i;j++){ 12 tmp*=x; 13 } 14 ans+=tmp*a[i]; 15 } 16 return ans; 17 } 18 int main() 19 { 20 double L,R; 21 scanf("%d%lf%lf",&n,&L,&R); 22 for(int i=n;i>=0;i--){ 23 scanf("%lf",&a[i]); 24 } 25 while(R-L>=1e-7){ 26 double mid1=(L+R)/2; 27 double mid2=(mid1+R)/2; 28 if(check(mid1)<check(mid2)){ 29 L=mid1; 30 } 31 else{ 32 R=mid2; 33 } 34 } 35 printf("%.5f\n",L); 36 return 0; 37 }