- 0309晚练——二分三分
模版【三分】
- 2025-3-12 8:18:12 @
#include<bits/stdc++.h>
using namespace std;
int n;
double l,r,a[100010];
double check(double x){//f(x)=pow(x,3)-pow(3x,2)-3x+1
double ans=0;
for(int i=1;i<=n+1;i++){
ans=ans*x+a[i];//累加pow(ans,x)
}
return ans;
}
int main(){
cin>>n>>l>>r;
for(int i=1;i<=n+1;i++){
cin>>a[i];
}
while(r-l>1e-15){//精度差不小于1e-15(函数系数均在 [-100,100] 内且至多 1515 位小数)
double mid1=l+(r-l)/3.0;//单调递增 <0
double mid2=r-(r-l)/3.0;//单调递减 >0
if(check(mid1)<check(mid2)){
l=mid1;
}else{
r=mid2;
}
}
cout<<l;
return 0;
}
0 comments
No comments so far...