题解0001:模板三分
给出一个 NN 次函数,保证在范围 [l, r][l,r] 内存在一点 xx,使得 [l, x][l,x] 上单调增,[x, r][x,r] 上单调减。试求出 xx 的值。
思路:
3分,每次求中间左边一点的函数值和右边一点的函数值,然后比一下,让中间=l或r,循环。
#include
using namespace std;
double eps=1e-7,l,r,arr[15]={0};//eps是左右数的最大误差
int n;
double Q(double a){
double sum=0;
for(int i=n;i>=0;i--){
sum=sum*a+arr[i];
}
return sum;
}
int main(){
cin>>n>>l>>r;
for(int i=n;i>=0;i--){
cin>>arr[i];
}
while(fabs(l-r)>=eps){//l-r绝对值(不知道l和r那个大)<=左右差距就停止循环(找到点了)
double mid=(l+r)/2;
if(Q(mid+eps)>Q(mid-eps)){
l=mid;
}else{
r=mid;
}
}
printf("%.5lf",r);
}