#46413: C++ AC 5ms


11311005@stu.dlsh.tc.edu.tw (そた)


兩個區塊跟主函式

一個負責轉
一個負責算眾數

用二維vector紀錄轉盤

#include <bits/stdc++.h>
using namespace std;

int n,m,k;
void turn(int b, vector<vector<char>> &arr, int row) {
    int len = arr[row].size();
    if (b == 0 || len == 0) return;
    int times = abs(b % len);
    if (b > 0) {
    for (int z = 0; z < times; z++) {
        char tmp = arr[row].back();
        arr[row].pop_back();
        arr[row].insert(arr[row].begin(), tmp);
    }
} else {
    for (int z = 0; z < times; z++) {
        char tmp = arr[row][0];
        arr[row].erase(arr[row].begin());
        arr[row].push_back(tmp);
    }
}
}
int score(const vector<vector<char>>& arr) {
    int total = 0;
    for (int col = 0; col < n; ++col) {
        unordered_map<char, int> freq;
        int maxCount = 0;
        for (int row = 0; row < m; ++row) {
            maxCount = max(maxCount, ++freq[arr[row][col]]);
        }
        total += maxCount;
    }
    return total;
}

int main() {
    cin >> m >> n >> k;
    vector<vector<char>> arr(m, vector<char>(n));
    for (int i = 0; i < m; i++)
        for (int j = 0; j < n; j++)
            cin >> arr[i][j];

    int totalScore = 0;
    for (int t = 0; t < k; t++) {
        for (int i = 0; i < m; i++) {
            int b;
            cin >> b;
            turn(b, arr, i);
        }
        totalScore += score(arr);
    }

    cout << totalScore << "\n";
    return 0;
}