# 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++`