来源:HDU 3714
三分还是蛮简单的,直接上代码:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
using namespace std;
const double eps = 1e-9;
const int MAXN = 10010;
const double IDOUBLE=(~0U>>1);
int n;
int a[MAXN];
int b[MAXN];
int c[MAXN];
double fun(double x,int pos){
return x*x*a[pos]*1.0+x*b[pos]*1.0+c[pos]*1.0;
}
double calc(double x){
double ans=-IDOUBLE;
for(int i=0;i<n;i++){
ans=max(ans,fun(x,i));
}
return ans;
}
bool judge(double mid,double midmid){
return calc(mid)<calc(midmid);
}
int main(){
int T;
scanf("%d",&T);
while(T--){
scanf("%d",&n);
for(int i=0;i<n;i++){
scanf("%d%d%d",&a[i],&b[i],&c[i]);
}
double left=0;
double right=1000;
double mid=(left+right)/2;
double midmid=(right+mid)/2;
while(abs(mid-midmid)>eps){
mid=(left+right)/2;
midmid=(right+mid)/2;
if(judge(mid,midmid)){
right=midmid;
}
else{
left=mid;
}
}
printf("%.4f\n",calc(mid));
}
return 0;
}
256

被折叠的 条评论
为什么被折叠?



