三分模板 上凸形

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 }

 

posted @ 2020-09-22 20:37  古比  阅读(169)  评论(0编辑  收藏  举报