Try   HackMD

APCS實作題2025年1月第1題:等紅綠燈

日期:2025年1月14日
作者:王一哲
ZeroJudge 題目連結

題目

問題描述

操場起跑線上有一個紅綠燈,綠燈為 a 秒,紅燈為 b 秒,依照綠燈紅燈的順序循環。有 n 個小朋友,從操場的起跑線騎腳踏車一起起跑,他們分別騎完一圈的時間為 t1,t2,t3,,tn。若騎到終點時為紅燈,需要等待紅燈結束變為綠燈才可以停止騎車。求出這 n 個小朋友共需要等待幾秒的紅燈秒數。
註:騎到終點時如果紅燈剛好開始,就要再騎 b 秒。

輸入說明

第一行輸入兩個正整數 a,b (1a,b100),接下來一行有一個正整數 n (1n30),最後一行有 n 個正整數數字,數字不超過 1000

子題配分

  • 60%:a=b=10,n=1
  • 40%:無限制

輸出格式

輸出這 n 個小朋友共需要等待多久的紅燈秒數。

範例輸入1

10 10
1
14

範例輸出1

6

範例輸入2

4 3
3
12 16 25

範例輸出2

5



Python 程式碼

費時最久約為 28 ms,使用記憶體最多約為 3.3 MB,通過測試。

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) # 印出答案



C++ 程式碼

費時最久約為 3 ms,使用記憶體最多約為 348 kB,通過測試。

#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; }




tags:APCSPythonC++