HDU3714 Error Curves

来源:互联网 发布:冷冰网络歌手 编辑:程序博客网 时间:2024/04/29 21:46

这道题为了写题解花了不少时间。。
卡精度。。
做法是三分。。

#include<stdio.h>struct fx{    double a,b,c;//这里要double的原因是防止testy的退化,一开始我就错在这里,要逐渐培养意识,不让这种低级错误发生!!!//}xishu[10010];int main(){    int T;    scanf("%d",&T);    while(T--)    {        int n;        scanf("%d",&n);        int i;        for(i=1;i<=n;i++)            scanf("%lf%lf%lf",&xishu[i].a,&xishu[i].b,&xishu[i].c);        double left=0;        double right=1000;        double mid1,mid2;        double testy;        double ans;        while(right-left>0.000000001)//这个数字是我wa好多次二分出来的..不能少一个0,但是愿意的话可以多加几个0//        {            mid1=(left+right)/2;//之所以除2,是因为满足精度。不然似乎在double范围内出不来答案。//            mid2=(mid1+right)/2;            double y1=-0x3f3f3f3f;            double y2=-0x3f3f3f3f;            for(i=1;i<=n;i++)            {                testy=xishu[i].a*mid1*mid1+xishu[i].b*mid1+xishu[i].c;                if(testy>y1)                    y1=testy;                testy=xishu[i].a*mid2*mid2+xishu[i].b*mid2+xishu[i].c;                if(testy>y2)                    y2=testy;            }                if(y1>y2)                    left=mid1;                else                    right=mid2;                if(right-left<=0.000000001)                ans=y2;//这里y1,y2无所谓的,因为精度确定了,一定在精度附近。//        }        printf("%.4lf\n",ans);        }    return 0;}
0 0
原创粉丝点击