这道题简直是很坑啦,由于自己太菜读错题缘故导致简单数学题wa了很多发。原来是t1到t2啊,一直以为就两架飞机。
就是三个方程三个未知数,利用最高点坐标(-b/2*a,4*a*c-b*b/4*a)就可以解出a,b,c的值了。
没什么坑点其实,理解好题目一切ok
代码:
#include<bits/stdc++.h>
using namespace std;
struct node
{
double mid;
double a;
double b;
double c;
double gao;
}boom[50100];
double height(int t1,double x1,double x2)
{
double lala=0;
if( x1<boom[t1].mid && x2>boom[t1].mid )
lala=boom[t1].gao;
else
lala=max((boom[t1].a*x1*x1+boom[t1].b*x1+boom[t1].c),
(boom[t1].a*x2*x2+boom[t1].b*x2+boom[t1].c));
return lala;
}
int main()
{
int n,m;
double x1,x2,x3;
while(cin>>n)
{
for(int i=1;i<=n;i++)
{
scanf("%lf%lf%lf",&x1,&x2,&x3);
boom[i].a=-x3*1.0/((x1-x2)*(x1-x2));
boom[i].b=-2*boom[i].a*x2;
///boom[i].c=boom[i].a*x2*x2+1.0/2*x3;
boom[i].c=boom[i].a*x2*x2+x3;
boom[i].mid=x2;
boom[i].gao=x3;
///cout<<boom[i].a<<"***"<<boom[i].b<<"***"<<boom[i].c<<endl;
}
scanf("%d",&m);
int t1,t2;
double xx1,xx2;
for(int i=1;i<=m;i++)
{
double hahaha=0;
scanf("%d%d%lf%lf",&t1,&t2,&xx1,&xx2);
for(int j=t1;j<=t2;j++)
{
double aa=height(j,xx1,xx2);
hahaha=max(aa,hahaha);
}
printf("%0.5lf\n",hahaha);
}
}
}