我的三分自己爆炸了
  • 板块P1883 函数
  • 楼主F1NE
  • 当前回复3
  • 已保存回复3
  • 发布时间2024/9/24 20:20
  • 上次更新2024/9/24 21:56:30
查看原帖
我的三分自己爆炸了
1163927
F1NE楼主2024/9/24 20:20
#include<bits/stdc++.h>
#define getm mid=(l+r)/3,lmid=mid+l,rmid=r-mid
#define ll long long
#define ld long double
using namespace std;
const int maxi=1e4+9; 
const ld eps=0.00000000001;
ld a[maxi],b[maxi],c[maxi];
int T,N;
inline ld max(ld a,ld b){return a>b?a:b;}
ld f(ld x,int i){return a[i]*x*x+b[i]*x+c[i];}
ld F(ld x){
	ld ans=f(x,1);
printf("x=%Lf,i=1,ans=%Lf\n",x,ans);
	for(int i=2;i<=N;i++){
		ans=max(ans,f(x,i));
printf("x=%Lf,i=%d,ans=%Lf\n",x,i,ans);
	}
	return ans;
}
void solve(){
	cin>>N;
	for(int i=1;i<=N;i++){
		scanf("%Lf%Lf%Lf",&a[i],&b[i],&c[i]);
	}
	ld l=0,r=1e3,mid,lmid,rmid;
//cout<<l<<' '<<r<<endl;
	while(r-l>eps){
		getm;
printf("l=%Lf,r=%Lf,lmid=%Lf,rmid=%Lf,r-l=%Lf\n",l,r,lmid,rmid,r-l);
		if(F(lmid)>F(rmid))l=lmid;
		else r=rmid;
	}
	printf("%.4Lf\n",F(l));
}
int main(){
	cin>>T;
	for(int i=1;i<=T;i++)solve();

    return 0;
}

用这段代码运行样例会发现最后一次三分时精度还不够就自己结束了,非常神奇,在线ide和本地的运行结果居然还是一样的

2024/9/24 20:20
加载中...