日期:2025年5月7日
ZeroJudge 題目連結:k848. P2.卡牌評分 (Card)
解題想法
分成兩個部分,先掃過全部的卡牌資料並找最大值,再掃一輪計算每張牌的積分。
Python 程式碼
使用時間約為 21 ms,記憶體約為 3.4 MB,通過測試。
import sys
for line in sys.stdin:
n = int(line) # n 張卡牌
S, A, D, H = [0]*n, [0]*n, [0]*n, [0]*n # 積分,攻擊力,防禦力,生命力
amax, dmax, hmax = 0, 0, 0 # 最高攻擊力,最高防禦力,最高生命力
for i in range(n): # 讀取 n 張牌的資料並找最大值
a, d, h = map(int, input().split())
A[i] = a; amax = max(amax, a)
D[i] = d; dmax = max(dmax, d)
H[i] = h; hmax = max(hmax, h)
for i in range(n): # 計算每張牌的積分
if A[i] == amax: S[i] += 1
if D[i] == dmax: S[i] += 1
if H[i] == hmax: S[i] += 1
print(S.index(max(S)) + 1) # 印出最高積分卡牌編號
C++ 程式碼
使用時間約為 2 ms,記憶體約為 100 kB,通過測試。
#include <cstdio>
#include <algorithm>
using namespace std;
int main() {
int n; // n 張卡牌
while(scanf("%d", &n) != EOF) {
int S[n] = {0}, A[n], D[n], H[n]; // 積分,攻擊力,防禦力,生命力
int amax = 0, dmax = 0, hmax = 0; // 最高攻擊力,最高防禦力,最高生命力
for(int i=0; i<n; i++) { // 讀取 n 張牌的資料並找最大值
int a, d, h; scanf("%d %d %d", &a, &d, &h);
A[i] = a; amax = max(amax, a);
D[i] = d; dmax = max(dmax, d);
H[i] = h; hmax = max(hmax, h);
}
for(int i=0; i<n; i++) { // 計算每張牌的積分
if (A[i] == amax) S[i]++;
if (D[i] == dmax) S[i]++;
if (H[i] == hmax) S[i]++;
}
printf("%ld\n", max_element(S, S+n) - S + 1); // 印出最高積分卡牌編號
}
return 0;
}
沒有留言:
張貼留言