社区讨论

萌新刚学三分求调

P3382三分参与者 4已保存回复 10

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
10 条
当前快照
1 份
快照标识符
@lo26uzcu
此快照首次捕获于
2023/10/23 08:57
2 年前
此快照最后确认于
2023/11/03 09:13
2 年前
查看原帖
感觉是精度的问题
我把printf换成cout<<setprecision(5)反而掉了20tps
CPP
#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
CPP
#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

回复

10 条回复,欢迎继续交流。

正在加载回复...