開啟章節選單
12959 Strategy Game
題目連結
題目敘述
一個有 J 位玩家參加的策略遊戲在一張桌子上進行。 每位玩家使用編號 1 到 J 進行識別,並且整場遊戲總共會進行 R 輪。
在每一輪中,每位玩家會依照編號順序輪流進行一次行動。 也就是說: 玩家 1 先行動、玩家 2 接著行動,依此類推,直到玩家 J 行動完畢,該輪結束,開始下一輪。
每次行動時,玩家會獲得一個稱為 勝利點數(Victory Points) 的整數。 所有回合結束後,計算每位玩家的總分(每次行動所得分數的總和), 得分最高的玩家為勝者。
若有多位玩家分數相同,則由這些人中 最後行動的那位玩家 獲勝。
輸入格式
每筆測資包含兩行:
-
第一行有兩個整數 J 和 R,代表玩家人數與總回合數1 ≤ J, R ≤ 500
-
第二行有 J × R 個整數,依照行動發生的順序,表示每次行動所獲得的勝利點數每個分數都為 0 ~ 100 的整數
順序是:P1, P2, ..., PJ, P1, P2, ..., PJ, ..., 依此類推
輸出格式
每筆測資輸出一行,一個整數代表勝利玩家的編號(從 1 開始編號)。
解題思路
score 紀錄每回合 J 個玩家的分數,最後輸出 score 中最大值的索引 +1,值相同則選擇索引較大者。
程式碼
#include<bits/stdc++.h> using namespace std; int main(){ int j, r; while (cin >> j >> r) { int s; vector<int> score(j, 0); for (int i = 0; i < r; i++) { for (int k = 0; k < j; k++) { cin >> s; score[k] += s; } } int m, index; for (int i = 0; i < j; i++) { if (i == 0 || score[i] >= m) { m = score[i]; index = i; } } cout << index + 1 << "\n"; } }