hrbust 2086 奔跑的xiaodao(二分)

奔跑的xiaodao
Time Limit: 4000 MSMemory Limit: 65536 K
Total Submit: 430(32 users)Total Accepted: 117(24 users)Rating: Special Judge: Yes
Description

某天,DS同学和他的妹子终于要见面了。DS在遥远的西藏,妹子在北京,中间隔着一条长长的川藏公路。DS和妹子都在这条公路上相向而行,因为过于思念对方,DS派出了xiaodao作为自己的情书信使。

DS和妹子相向而行,速度为 v1 , v2 m/s 尽职尽责的xiaodao同学以 v m/s 的速度奔跑,他一开始拿着DS的信向妹子的方向狂奔,遇到妹子之后毫不停歇,拿着妹子的书信继续以 v 的速度向DS奔跑,周而复始,一直到DS和妹子相遇为止。好辛劳的xiaodao

但是DS是个胖子,妹子是女生,大家都体力不太行。已知DS奔跑 T1 s 之后就要休息 Wait1 s ,妹子奔跑 T2 s 之后就要休息Wait2 s 。而xiaodao是不会休息的!经过计算,DS和妹子的初始距离为 L 

xiaodao想问你,当DS和妹子终于相遇的时候,xiaodao这时候已经奔跑了多少 m 的距离。

Input

第一行一个整数 T  代表数据组数,以下 T 组数据。

每组数据包含 8 个实数 分别代表 v1 , v2 , v , T1 , T2 , Wait1 , Wait2 , L

1 <= v1 , v2 <= 100 , v1 < v <= 100 , 1 <= T1 , T2 <= 1000 , 0 <= Wait1 , Wait2 <= 1000 . 1 <= L <= 10000 .

Output

对于每组数据输出一个实数 S 代表 xiaodao 奔跑的距离。
如果标程给出的答案是 Ans  只要 | Ans - S | < 1e-5 你就会得到 Accepted

Sample Input
1
1.00 1.00 2.00 1.00 1.00 0.00 0.00 2.00
Sample Output
2.000000000
Source
哈尔滨理工大学第四届ACM程序设计竞赛(同步赛)
对时间二分

#include<stdio.h>
#include<string.h>
int main()
{
    int T;
    while(scanf("%d",&T)==1)
    {

        while(T--)
        {
            double v1, v2, v, T1, T2, Wait1, Wait2, L;
            scanf("%lf%lf%lf%lf%lf%lf%lf%lf",&v1,&v2,&v,&T1,&T2,&Wait1,&Wait2,&L);
             // printf("%d\n",T);
              double r=10000000;
            double l=0;
            for(int i=0; i<150; i++)
            {
                double mid=(r+l)/2;
                double s=0;
                int q1,q2;
                q1=(int)(mid/(T1+Wait1));
                q2=(int)(mid/(T2+Wait2));
                s+=(q1*v1*T1+q2*v2*T2);
                double y1=mid-(q1*(T1+Wait1));
                double y2=mid-(q2*(T2+Wait2));
                if(y1>=T1)
                    s+=(T1*v1);
                else s+=(y1*v1);
                if(y2>=T2)
                    s+=(T2*v2);
                else s+=(y2*v2);
                if(s>=L)
                    r=mid;
                else l=mid;
            }
            printf("%.9f\n",l*v);
        }
    }
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值