1. 程式人生 > >前往央都之行-gdufe1529

前往央都之行-gdufe1529

前往央都之行

Time Limit: 2000/1000ms (Java/Others)

Problem Description:

刀光哥桐人和尤吉歐兩人為了拯救愛麗絲,同時從盧利特村出發要儘快同時趕到央都。出發時盧利特村有一位公理教會的整合騎士,可是他的龍只能帶一人。已知刀光哥和尤吉歐兩人的步行速度一樣,且小於龍的速度。問:怎樣利用整合騎士的龍能使兩人儘快同時到達央都。

Input:

輸入資料有多組,每組有三個資料分別表示盧利特村和央都兩地的距離s,桐人和尤吉歐的步行速度a,龍的速度b。

Output:

兩人同時到達央都地需要的最短時間,保留6位小數。

Sample Input:

120 5 25

Sample Output:

9.600000

思路分析:最後同時到達,一個人走著到,一個人坐著龍飛到。
已知路程s,人的速度a,龍的速度b。人甲乙和龍,可分為三個階段:
第一階段t1:甲坐著龍飛,乙走路。
第二階段t2:龍放下甲返回接乙,此間甲走路,乙也走路。
第三階段t3:龍接到乙,乙坐龍飛,甲走路。
甲的路程:t1*b + t2*a + t3*a = s;
乙的路程: t1*a + t2*a + t3*b = s;
可得: t1*b + t3*a = t1*a + t3*b; → t1*(b-a) = t3*(b-a); → t1 = t3;
結論:甲乙走路時間一樣: t1 + t2 ,坐龍飛的時間一樣 t1
明顯,只有一條式子,只能有一個變數,要把t2解決掉。設走路的路程為x,則坐龍飛的時間為s-x。
甲走路的時間 = 乙坐龍飛的時間 + 龍返回接乙的時間
龍返回接乙的路程如何表示?

龍放下甲後,甲一直走到終點,拋下甲的地點為s-x,龍接到乙之前,乙都是在走路,接到乙的地點為x,行程為(s-2x)
x/a = (s-x)/b + (s-2x)/b;
x = (2*s*a) / (b+3a);
全程時間 = 走路時間 + 坐龍飛時間
t = x/a + (s-x)/b;
AC程式碼:
#include<iostream>
#include<stdio.h>
#include<algorithm>
#include<set>
#include<string.h>
using namespace std;



int main()
{
    
double x,t1,t2,t,s,a,b; while( scanf("%lf%lf%lf",&s,&a,&b)!=-1) ///不要用整型輸入,有誤差導致wa { x = (2*s*a) / (b+3*a); t1 = x/a; t2 = (s-x)/b; t = t1 + t2; printf("%.6lf\n",t); } return 0; }