日期:2025年8月2日
ZeroJudge 題目連結:b762. 英國聯蒙
解題想法
這題用字典或串列儲存對應的訊息,寫起來會比較簡潔。
Python 程式碼
使用時間約為 18 ms,記憶體約為 3.4 MB,通過測試。
act = {"Get_Kill": 1, "Get_Assist": 2, "Die": 3} # 輸入的狀態
# 連續擊殺數對應的訊息
kill_mess = ["",
"You have slain an enemie.",
"You have slain an enemie.",
"KILLING SPREE!",
"RAMPAGE~",
"UNSTOPPABLE!",
"DOMINATING!",
"GUALIKE!",
"LEGENDARY!"]
# 陣亡時連續擊殺數對應的訊息
die_mess = [ "You have been slained.",
"SHUTDOWN."]
N = int(input()) # 指令數量
cont = 0 # 連續擊殺數
kill = 0 # 總擊殺數
ast = 0 # 助攻次數
die = 0 # 陣亡次數
for _ in range(N):
a = act[input().strip()] # 讀取 N 行指令,要用 strip() 刪除某些測資後方多的 \t 或空白
if a == 1: # 如果是 Get_Kill
cont += 1 # 連續擊殺數加 1
if cont >= 8: print(kill_mess[8]) # 如果連續擊殺數大於等於 8,印出 kill_mess[8]
else: print(kill_mess[cont]) # 否則印出 kill_mess[cont]
elif a == 2: ast += 1 # 如果是 Get_Assist 助攻數加 1
elif a == 3: # 如果是 Die
if cont < 3: print(die_mess[0]) # 如果連續擊殺數小於 3,印出 die_mess[0]
else: print(die_mess[1]) # 否則印出 die_mess[1]
die += 1 # 陣亡次數加 1
kill += cont # 更新擊殺總數
cont = 0 # 連續擊殺數歸零
kill += cont # 最後要再加上一次連續擊殺數
print(f"{kill:d}/{die:d}/{ast:d}") # 印出答案
C++ 程式碼
使用時間約為 2 ms,記憶體約為 332 kB,通過測試。
#include <iostream>
#include <string>
#include <map>
using namespace std;
int main() {
ios::sync_with_stdio(0); cin.tie(0);
map<string, int> act = {{"Get_Kill", 1}, {"Get_Assist", 2}, {"Die", 3}}; // 輸入的狀態
/* 連續擊殺數對應的訊息 */
string kill_mess[9] = {"",
"You have slain an enemie.",
"You have slain an enemie.",
"KILLING SPREE!",
"RAMPAGE~",
"UNSTOPPABLE!",
"DOMINATING!",
"GUALIKE!",
"LEGENDARY!"};
/* 陣亡時連續擊殺數對應的訊息 */
string die_mess[2] = {"You have been slained.",
"SHUTDOWN."};
/* 解題過程 */
int N; cin >> N; // 指令數量
int cont = 0, kill = 0, ast = 0, die = 0; // 連續擊殺數,總擊殺數,助攻次數,陣亡次數
for(int i=0; i<N; i++) {
string s; cin >> s; // 讀取 N 行指令
int a = act[s]; // 指令對應的編號
if (a == 1) { // 如果是 Get_Kill
cont++; // 連續擊殺數加 1
if (cont >= 8) cout << kill_mess[8] << "\n"; // 如果連續擊殺數大於等於 8,印出 kill_mess[8]
else cout << kill_mess[cont] << "\n"; // 否則印出 kill_mess[cont]
} else if (a == 2) {
ast++; // 如果是 Get_Assist 助攻數加 1
} else if (a == 3) { // 如果是 Die
if (cont < 3) cout << die_mess[0] << "\n"; // 如果連續擊殺數小於 3,印出 die_mess[0]
else cout << die_mess[1] << "\n"; // 否則印出 die_mess[1]
die++; // 陣亡次數加 1
kill += cont; // 更新擊殺總數
cont = 0; // 連續擊殺數歸零
}
}
kill += cont; // 最後要再加上一次連續擊殺數
cout << kill << "/" << die << "/" << ast <<"\n"; // 印出答案
return 0;
}
沒有留言:
張貼留言