# APCS實作題2023年1月第1題:程式考試 > 日期:2023年9月26日 > 作者:王一哲 > 題目來源:112年1月實作題第1題 > [ZeroJudge 題目連結](https://zerojudge.tw/ShowProblem?problemid=j605) <br /> ## 題目 ### 問題描述 給 $n$ 個提交紀錄,第 $i$ 個提交紀錄有兩個整數 $t_i$ 和 $s_i$ 代表上傳時間和該次上傳的分數,若第 $i$ 次的提交結果為嚴重錯誤,則 $s_i$ 為 $-1$。 計算總分的公式為提交紀錄中的 $最高分 - 總提交次數 - 總嚴重錯誤次數 \times 2$,若計算出來的分數為負數則計為 $0$。 請輸出總分和第一次獲得最高分的時間點。 <br /> ### 輸入說明 第一行有一個正整數 $K (1 \leq K \leq 6)$ 代表提交的次數,接下來有 $K$ 行,第 $i$ 行有兩個整數 $t_i (1 \leq t_i \leq 100)$ 和 $s_i (-1 \leq s_i \leq 100)$。保證提交紀錄按照時間點嚴格遞增排序,並且第一個提交紀錄不會是嚴重錯誤。 - 60分:$K = 3$ - 40分:無其他限制 <br /> ### 輸出說明 輸出兩個整數,代表總分和第一次獲得最高分的時間點。 <br /> ### 範例一:輸入 ``` 5 3 89 5 -1 10 90 15 0 20 90 ``` ### 範例一:正確輸出 ``` 83 10 ``` <br /> ### 範例二:輸入 ``` 3 3 0 5 -1 6 -1 ``` ### 範例二:正確輸出 ``` 0 3 ``` <br /> ## Python 程式碼 於 ZeroJudge 測試結果,最長運算時間約為 30 ms,使用記憶體最多約為 3.3 MB,通過測試。 ```python= K = int(input()) # 讀取提交答案次數 K time, high = map(int, input().split()) # 讀取第一筆資料存入 time, high error = 0 # 嚴重錯誤次數預設為0 for _ in range(1, K): # 讀取接下來的 K-1 筆資料 t, s = map(int, input().split()) # 讀取提交答案時間及分數 if s == -1: # 如果 s 為 -1,嚴重錯誤 error += 1 # error 加1 elif s > high: # 如果 s 大於目前的最高分 time = t # 更新時間 high = s # 更新最高分 score = high - K - error*2 # 計算總分 if score < 0: score = 0 # 如果總分是負的,重設為0 print("{:d} {:d}".format(score, time)) # 印出答案 ``` <br /><br /> ## C++ 程式碼 於 ZeroJudge 測試結果,最長運算時間約為 2 ms,使用記憶體最多約為 340 kB,通過測試。 ```cpp= #include <iostream> using namespace std; int main() { int K; cin >> K; // 讀取提交答案次數 K int time, high; cin >> time >> high; // 讀取第一筆資料存入 time, high int error = 0; // 嚴重錯誤次數預設為0 for(int i=1; i<K; i++) { // 讀取接下來的 K-1 筆資料 int t, s; cin >> t >> s; // 讀取提交答案時間及分數 if (s == -1) { // 如果 s 為 -1,嚴重錯誤 error++; // error 加1 } else if (s > high) { // 如果 s 大於目前的最高分 time = t; // 更新時間 high = s; // 更新最高分 } } int score = high - K - error*2; // 計算總分 if (score < 0) score = 0; // 如果總分是負的,重設為0 cout << score << " " << time << endl; // 印出答案 return 0; } ``` <br /><br /> --- ###### tags:`APCS`、`Python`、`C++`
×
Sign in
Email
Password
Forgot password
or
Sign in via Google
Sign in via Facebook
Sign in via X(Twitter)
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
Continue with a different method
New to HackMD?
Sign up
By signing in, you agree to our
terms of service
.