洛谷P1883 函数

传送门
水题使我快落

#include 
#include 
#include 
#include 
#include 
#include 
#include  
using namespace std;
const int N=10050;
int T;
int n;
double a[N],b[N],c[N];
inline int read(){//好看的快读 
	int x=0,f=1;
	char ch=getchar();
	while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
	while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
	return x*f;
}
double cal(double x){
	double maxx=-2147483647;
	for(int i=1;i<=n;i++)maxx=max(maxx,a[i]*x*x+b[i]*x+c[i]);
	return maxx;
}
int main(){
	T=read();
	while(T--){
		double minn=2147483647;
		n=read();
		for(int i=1;i<=n;i++) scanf("%lf%lf%lf",&a[i],&b[i],&c[i]);
		double l=0.0000;
		double r=1000.0000;
		while(l+1e-11<r){//这里是在判断double类型大小时候常用的一种方法,加上一个极小值,可以减小误差,注意这个值的大小,要足够小,我一开始取1e-6全Wa了嘤嘤嘤 
		    double mid=(l*2+r)/3;
			double midr=(l+r*2)/3;
			double f2=cal(mid);
			double f3=cal(midr);
			if(f2>f3)l=mid;
			else r=midr;
		}
		printf("%.4lf\n",cal(l));
	}
	return 0;

}

你可能感兴趣的:(水题)