萌新刚学三分求调
查看原帖
萌新刚学三分求调
461012
dyyzy楼主2023/7/18 08:24

感觉是精度的问题

我把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

2023/7/18 08:24
加载中...