CCF-201812-2-小明放學
阿新 • • 發佈:2019-01-13
題目大意:
這題和第一題的區別在於,小明事先得知路況(路口通過時間和交通燈資料),走之前預測估算走多少時間,不再是第一題那樣走多少記多少。
思路:
由於沒有親自去走,所以需要模擬人去走,得到走的總時間,遇到路口就加時間,遇到交通燈的時候,通過總時間和交通燈一開始的情況推算出,現在交通燈情況,用現在交通燈情況就可以像第一題那樣加時間。
細節:
1.推算時注意題目交通燈的標號(1-紅,2-黃,3-綠),然後紅綠燈執行順序是((0)紅–>(1)綠–>(2)黃),到時候進行推算的時候要進行下標與標號的轉換,把123一一對應成012。下標往前推進的時候,通過模運算保證下標一直是0,1,2。
2.不要一個個燈去推(要不然就超時了,嗚嗚嗚~~這次考試的時候就是這樣,最後才70分),因為紅綠燈是週期執行的,總時間可以減去前面的週期時間,剩下最後一個週期時間,再在這個週期時間內推算交通燈的情況
python程式碼:
def comput(light, time, total, r, y, g): # 紅-->綠-->黃 lights = [r, g, y] # 轉換下標 # 123ryg-->012rgy if light == 1: light = 0 elif light == 3: light = 1 # 先減去第一個燈的剩餘時間 total -= time # 燈變成下一個燈 light = (light + 1) % 3 if total < 0: return (light - 1) % 3, -total # 減去前面重複的週期 total -= total // (r + y + g) * (r + y + g) while total >= 0: total -= lights[light] light = (light + 1) % 3 return (light - 1) % 3, -total # 主邏輯 r, y, g = map(int, input().split()) n = int(input()) total = 0 for i in range(n): k, t = map(int, input().split()) # 通過路口 if k == 0: total += t # 遇到交通燈 else: # 推算出當前交通燈的情況 k, t = comput(k, t, total, r, y, g) # 紅燈 if k == 0: total += t # 黃燈 elif k == 2: total += t + r print(total)