Flights


这道题简直是很坑啦,由于自己太菜读错题缘故导致简单数学题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);
    }
   
    }

}


猜你喜欢

转载自blog.csdn.net/xianpingping/article/details/80767056