兩個區塊跟主函式
一個負責轉
一個負責算眾數
用二維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;
}