練習 - Ride to School

題目:北京大學的許多研究生住在萬柳校區,距離主校區燕園有4.5公里。住在萬柳的同學或者乘坐巴士,或者騎自行車去主校區上課。由於北京糟糕的交通,許多同學選擇騎自行車。
我們假定除了Charley以外,所有的同學從萬柳到燕園都是以某一確定的速度騎自行車。Charley則有一個不同的騎車習慣-他總是要跟在另一個騎車同學的後面,以免一個人獨自騎車。當Charley到萬柳校區大門口的時候,他就等待離開萬柳去燕園的同學。如果他等到這樣的同學,他就騎車跟著這位同學;如果沒有這樣的同學,他就等待去燕園的同學出現,然後騎車跟上。在從萬柳到燕園的路上,如果有騎得更快的同學超過了Charley,他就離開原先跟著的同學,加速跟上騎得更快的同學。
假設Charley到萬柳校區大門口的時間為0,列出其他同學離開萬柳的時間和速度,請你列出Charley到達燕園的時間。

輸入:有幾組測試用例,每組測試用例的第一行為N(1<=N<=10000),表示除Charley外騎車同學的數量。以N=0表示輸入結束。每組測試用例的第一行後面的N行表示N個騎車同學的資訊,形式為Vi Ti
Vi<40,是一個正整數,表示第i個騎車同學的速度(每小時公里數),T則是第i個騎車同學離開萬柳的時間,是一個整數,以秒為單位。在任何測試用例中總存在非負的Ti

輸出:對每個測試用例輸出一行:Charley到達的時間。在處理分數的時候進1。

import java.util.Scanner;

public class RideToSchool {

	public static void main(String[] args) {
		final double DISTANCE = 4.5;
		while (true) {
			int m;
			Scanner scanIn = new Scanner(System.in); // 輸入有幾組測試用例
			m = scanIn.nextInt();
			if (m == 0)
				break;
			double v, t, x, min = 10000;
			for (int i = 0; i < m; i++) {
				scanIn = new Scanner(System.in); // 輸入每一個測試用例的時速與出發時間
				v = scanIn.nextDouble();
				t = scanIn.nextDouble();
				if (t >= 0 && (x = DISTANCE * 3600 / v + t) < min) {
					min = x;
				}
			}
			System.out.printf("%.2f\n", Math.ceil(min));
		}
	}

}

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

*

驗證碼 * Time limit is exhausted. Please reload CAPTCHA.

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料