201812-2 小明放學
阿新 • • 發佈:2019-03-14
default lsp 評測 利用 一段 aci space ref wid
題目傳送門:http://118.190.20.162/view.page?gpid=T81
問題描述
試題編號: | 201812-2 |
試題名稱: | 小明放學 |
時間限制: | 1.0s |
內存限制: | 512.0MB |
問題描述: |
題目背景
漢東省政法大學附屬中學所在的光明區最近實施了名為“智慧光明”的智慧城市項目。具體到交通領域,通過“智慧光明”終端,可以看到光明區所有紅綠燈此時此刻的狀態。小明的學校也安裝了“智慧光明”終端,小明想利用這個終端給出的信息,估算自己放學回到家的時間。
問題描述
一次放學的時候,小明已經規劃好了自己回家的路線,並且能夠預測經過各個路段的時間。同時,小明通過學校裏安裝的“智慧光明”終端,看到了出發時刻 輸入的第二行包含一個正整數 n,表示小明總共經過的道路段數和路過的紅綠燈數目。 接下來的 n 行,每行包含空格分隔的兩個整數 k、t。k=0 表示經過了一段道路,將會耗時 t 秒,此處 t 不超過 106;k=1、2、3 時,分別表示出發時刻,此處的紅綠燈狀態是紅燈、黃燈、綠燈,且倒計時顯示牌上顯示的數字是 t,此處 t 分別不會超過 r、y、g。 輸出格式 輸出一個數字,表示此次小明放學回家所用的時間。 樣例輸入 30 3 30 0 10 1 5 0 11 2 2 0 6 0 3 3 10 0 3 樣例輸出 46 樣例說明 小明先經過第一段路,用時 10 秒。第一盞紅綠燈出發時是紅燈,還剩 5 秒;小明到達路口時,這個紅綠燈已經變為綠燈,不用等待直接通過。接下來經過第二段路,用時 11 秒。第二盞紅綠燈出發時是黃燈,還剩兩秒;小明到達路口時,這個紅綠燈已經變為紅燈,還剩 11 秒。接下來經過第三、第四段路,用時 9 秒。第三盞紅綠燈出發時是綠燈,還剩 10 秒;小明到達路口時,這個紅綠燈已經變為紅燈,還剩兩秒。接下來經過最後一段路,用時 3 秒。共計 10+11+11+9+2+3 = 46 秒。 評測用例規模與約定 有些測試點具有特殊的性質: 測試點的輸入數據規模: * 前 6 個測試點保證 n ≤ 103。 * 所有測試點保證 n ≤ 105。 |
題解:
#include<iostream> using namespace std; int main() { long long r, y, g, n, k, t, ans = 0, temp = 0, wait = 0; cin >> r >> y >> g >> n; while (n--) { cin >> k >> t; temp = ans % (r + g + y);//確保在一個周期內 switch (k) { case 0: wait = t; break; case 1: //紅燈 if (temp - t < 0) wait = t - temp;//到達時未變色還是紅燈 else if (temp - t < g) wait = 0;//到達時由紅燈變為綠燈 else if (temp - t - g > 0 && temp - t - g < y) wait = y - (temp - t - g) + r;//到達時由紅燈變為綠燈再變為黃燈 else wait = r - ((temp - t - g) - y);//到達時由紅燈變為綠燈變為黃燈再變為紅燈 break; case 2: //黃燈 if (temp - t < 0) wait = t - temp + r;//到達時未變色還是黃燈 else if (temp - t < r) wait = r - (temp - t); //到達時由黃燈變為紅燈 else if (temp - t - r >= 0 && temp - t - r <= g) wait = 0;//到達時由黃燈變為紅燈再變為綠燈 else wait = y - (temp - t - r - g) + r;//到達時由黃燈變為紅燈變為綠燈再變為黃燈 break; default: //綠燈 if (temp - t < 0) wait = 0; //到達時未變色還是綠燈 else if (temp - t >= 0 && temp - t < y) wait = r + y - (temp - t); //到達時由綠燈變為黃燈 else if (temp - t - y >= 0 && temp - t - y < r) wait = r - (temp - t - y); //到達時由綠燈變為黃燈再變為紅燈 else wait = 0; //到達時由綠燈變為黃燈再變為紅燈再變為綠燈 break; } ans += wait; } cout << ans << endl; return 0; }
201812-2 小明放學