開啟章節選單

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";
    }
}