感觉是精度的问题
我把printf换成cout<<setprecision(5)反而掉了20tps
#include<iostream>
#include<cstdio>
#include<iomanip>
using namespace std;
const double eps=1e-9;
const int N=15;
double a[N];
int n;
double f(double x){
double res=0;
double tot=1;
for(int i=n;i>=1;--i){
tot*=x;
res+=tot*a[i];
}
return res;
}
int main(){
cin>>n;
double l,r;cin>>l>>r;
for(int i=1;i<=n;++i) cin>>a[i];
while(1.0*(l+eps)<1.0*r){
// cout<<l<<" "<<r<<'\n';
double midl=l+(r-l)/3,midr=r-(r-l)/3;
double fl=f(l),fr=f(r);
if(fl>fr) r=midr;
else l=midl;
}
printf("%.5f",l);
}
50tps
#include<iostream>
#include<cstdio>
#include<iomanip>
using namespace std;
const double eps=1e-9;
const int N=15;
double a[N];
int n;
double f(double x){
double res=0;
double tot=1;
for(int i=n;i>=1;--i){
tot*=x;
res+=tot*a[i];
}
return res;
}
int main(){
cin>>n;
double l,r;cin>>l>>r;
for(int i=1;i<=n;++i) cin>>a[i];
while(1.0*(l+eps)<1.0*r){
// cout<<l<<" "<<r<<'\n';
double midl=l+(r-l)/3,midr=r-(r-l)/3;
double fl=f(l),fr=f(r);
if(fl>fr) r=midr;
else l=midl;
}
cout<<setprecision(5)<<l;
}
30tps