hdu 5515 Game of Flying Circus(二分、模拟)

来源:互联网 发布:正规的网络兼职赚钱 编辑:程序博客网 时间:2024/06/09 16:30

题目链接:

http://acm.hdu.edu.cn/showproblem.php?pid=5515


这里有篇文章,题意和思路都讲的非常好!

链接:http://blog.csdn.net/snowy_smile/article/details/49450163


代码:

#include<stdio.h>#include<string.h>#include<math.h>#define eps 0.00000001double T,V1,V2;void solve(){     double l,r;       double t1,t2,x,mid;    if(V1==V2){        printf("Yes\n");        return;    }    else if(2*V1*V1>V2*V2){    //在2-3之间拦截       l=0;       r=300;        while(fabs(l-r)>eps)    //二分横坐标        {             mid=(l+r)/2.0;           t1=sqrt(300*300+mid*mid)/V1;           t2=(300+mid)/V2;           if(t1>=t2)l=mid;           else r=mid;        }        mid=(l+r)/2.0;        t1=(mid+600)/V1;        t2=T+(600-mid)/V2;        if(t1>t2){            printf("No\n");            return;        }        else {            printf("Yes\n");            return;        }    }    else if(3*V1>V2)    //在3-4之间拦截    {        l=0;        r=300;        while(fabs(l-r)>eps)    //二分纵坐标        {             mid=(l+r)/2.0;            t1=sqrt(300*300+(300-mid)*(300-mid))/V1;            t2=(600+mid)/V2;            if(t1>=t2)l=mid;            else r=mid;        }        mid=(l+r)/2.0;        t1=(sqrt(mid*mid+300*300)+900)/V1;        t2=(600-mid)/V2+T;        if(t1>t2){            printf("No\n");            return;        }        else {            printf("Yes\n");            return;        }    }    else {        printf("No\n");        return ;    }}int main(){    int t,i,j,k,icase=0;    scanf("%d",&t);    while(t--)    {        icase++;        scanf("%lf%lf%lf",&T,&V1,&V2);        printf("Case #%d: ",icase);        solve();    }    return 0;}


0 0
原创粉丝点击