1435 曲线
啊,又是一个区间查询的问题,偶滴天哪
这道题和刚才做的不一样,它需要分成三部分,因为确定是三个系数,所以,需要(l+r)/3
不过这个题我做了好长时间了,还没有明白到底哪里挂了
原来我把l和r的变量搞错了,本来该设置成double,结果我学成了int,呜呜呜
最后感觉这个题很像集训做的第一道题,一元三次方程
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<string>
using namespace std;
const int SIZE=1e4+5;
int T;int n;
double a[SIZE],b[SIZE],c[SIZE];
double l,r;
double lmid,rmid;
double maxx;
double sol(double x)
{
maxx=-0x7fffffff;
for(int i=1;i<=n;i++)
maxx=max(maxx,a[i]*x*x+b[i]*x+c[i]);//寻找的结果代入方程
return maxx;
}
int main()
{
cin>>T;
while(T--)
{
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i]>>b[i]>>c[i];
l=0,r=1000;
while(l+1e-11<r)
{
//cout<<"POLICE警察"<<endl;
lmid=l+(r-l)/3;
rmid=r-(r-l)/3;//三分
if(sol(lmid)<=sol(rmid)) r=rmid;
else l=lmid;
}
printf("%.4lf\n",sol(l));
}
return 0;
}
/*
2
1
2 0 0
2
2 0 0
2 -4 2
*/
本文探讨了一道涉及一元三次方程的区间查询问题,重点在于理解如何正确设置变量类型并运用三分搜索法求解。作者分享了解决过程中关于变量类型混淆的教训,并将其与集训中的类似题目相联系。
889

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



