ZeroJudge F374: 分組 Grouping

題目敘述

每筆資料有兩個數字N和P,N代表一組有幾個人,P代表參賽選手的戰力 (均為個位數)。分組的機制是由右往左排,不一定每一組都會有N個人。要求輸出戰力總和最高的組別的編號 (由右往左分組的話為第幾組) 和戰力總和。


範例輸入 #1

1 369

範例輸出 #1

1 9


範例輸入 #2

2 193426

範例輸出 #2

3 10


範例輸入 #3

5 10121315

範例輸出 #3

1 12


範例輸入 #4

4 12344321

範例輸出 #4

2 10


解題思路

可以將P使用字串的方式存起來,因為題目有講最多不會超過9位選手,所以可以使用reverse不用擔心會TLE,將字串反轉之後就使用For迴圈將每一個字元做判斷並且找出最大戰力總和的組別。

解題程式碼如下 (僅供參考):

#include <iostream>
#include <algorithm>
using namespace std;

int main() {
    cin.sync_with_stdio(0);
    cin.tie(0);
    int N;
    string str;
    cin >> N;
    cin >> str;
    reverse(str.begin(), str.end());
    int count = 0, sum = 0, max = -999, team, cnt = 0;
    for (int i = 0; i<str.length(); i++)
    {
        sum += int(str[i] - '0');
        count++;
        if (count == N || i == str.length()-1)
        {
            count = 0;
            cnt++;
            if (sum >= max)
            {
                max = sum;
                team = cnt;
            }
            sum = 0;
        }
    }
    cout << team << " " << max << endl;
}

留言

這個網誌中的熱門文章

ZeroJudge M933: 邏輯電路

ZeroJudge A148: You Cannot Pass?!

ZeroJudge M932: 蜜蜂觀察