# APCS實作題2025年1月第1題:等紅綠燈 > 日期:2025年1月14日 > 作者:王一哲 > [ZeroJudge 題目連結](https://zerojudge.tw/ShowProblem?problemid=q181) ## 題目 ### 問題描述 操場起跑線上有一個紅綠燈,綠燈為 $a$ 秒,紅燈為 $b$ 秒,依照綠燈紅燈的順序循環。有 $n$ 個小朋友,從操場的起跑線騎腳踏車一起起跑,他們分別騎完一圈的時間為 $t_1, t_2, t_3, \dots, t_n$。若騎到終點時為紅燈,需要等待紅燈結束變為綠燈才可以停止騎車。求出這 $n$ 個小朋友共需要等待幾秒的紅燈秒數。 **註:騎到終點時如果紅燈剛好開始,就要再騎 $b$ 秒。** <br /> ### 輸入說明 第一行輸入兩個正整數 $a, b ~(1 \leq a, b \leq 100)$,接下來一行有一個正整數 $n ~(1 \leq n \leq 30)$,最後一行有 $n$ 個正整數數字,數字不超過 $1000$。 子題配分 - 60%:$a = b = 10, n = 1$ - 40%:無限制 <br /> ### 輸出格式 輸出這 $n$ 個小朋友共需要等待多久的紅燈秒數。 <br /> ### 範例輸入1 ``` 10 10 1 14 ``` ### 範例輸出1 ``` 6 ``` ### 範例輸入2 ``` 4 3 3 12 16 25 ``` ### 範例輸出2 ``` 5 ``` <br /><br /> ## Python 程式碼 費時最久約為 28 ms,使用記憶體最多約為 3.3 MB,通過測試。 ```python= a, b = map(int, input().split()) # 綠燈、紅燈秒數 c = a+b # 綠燈、紅燈循環一次的秒數 n = int(input()) # n 個人 ts = list(map(int, input().split())) # 每個人騎一圈需要的秒數 ans = 0 # 等紅燈秒數 for t in ts: # 依序讀取每個人騎一圈需要的秒數 r = t%c # 剩下的秒數 if r >= a: ans += c-r # 遇到紅燈,ans 加上剩下的紅燈秒數 print(ans) # 印出答案 ``` <br /><br /> ## C++ 程式碼 費時最久約為 3 ms,使用記憶體最多約為 348 kB,通過測試。 ```cpp= #include <iostream> using namespace std; int main() { ios::sync_with_stdio(0); cin.tie(0); int a, b; cin >> a >> b; // 綠燈、紅燈秒數 int c = a+b, n, ans = 0; // 綠燈、紅燈循環一次的秒數 c,n 個人,等紅燈秒數 cin >> n; // 讀取人數 for(int i=0, t, r; i<n; i++) { // 依序讀取每個人騎一圈需要的秒數 t cin >> t; r = t%c; // 剩下的秒數 if (r >= a) ans += c-r; // 遇到紅燈,ans 加上剩下的紅燈秒數 } cout << ans << "\n"; // 印出答案 return 0; } ``` <br /><br /> --- ###### tags:`APCS`、`Python`、`C++`