#include <bits/stdc++.h>
using namespace std;
int main() {
cin.tie(0);
ios_base::sync_with_stdio(0);
int H, W;
cin >> H >> W;
vector<string> grid(H);
vector<vector<int>> inRow(H, vector<int>(26));
vector<vector<int>> inCol(W, vector<int>(26));
for (int row = 0; row < H; row++) {
cin >> grid[row];
for (int col = 0; col < W; col++) {
++inRow[row][grid[row][col]-'A'];
++inCol[col][grid[row][col]-'A'];
}
}
vector<pair<char, pair<int,char>>> operations;
for (int rep = 0; rep < H + W; rep++) {
for (int row = 0; row < H; row++) {
int cnt = 0, letter = 0;
for (int i = 0; i < 26; i++) {
if (inRow[row][i]) {
cnt++;
letter = i;
}
}
if (cnt == 1) {
operations.push_back({'R', {row, 'A'+letter}});
for (int col = 0; col < W; col++) {
if(grid[row][col]) {
--inRow[row][grid[row][col]-'A'];
--inCol[col][grid[row][col]-'A'];
grid[row][col] = 0;
}
}
}
}
for (int col = 0; col < W; col++) {
int cnt = 0, letter = 0;
for (int i = 0; i < 26; i++) {
if (inCol[col][i]) {
cnt++;
letter = i;
}
}
if (cnt == 1) {
operations.push_back({'K', {col, 'A'+letter}});
for (int row = 0; row < H; row++) {
if(grid[row][col]) {
--inRow[row][grid[row][col]-'A'];
--inCol[col][grid[row][col]-'A'];
grid[row][col] = 0;
}
}
}
}
}
cout << operations.size() << "\n";
reverse(operations.begin(), operations.end());
for (auto p : operations) {
cout << p.first << " " << p.second.first + 1 << " " << p.second.second << "\n";
}
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 | #include <bits/stdc++.h> using namespace std; int main() { cin.tie(0); ios_base::sync_with_stdio(0); int H, W; cin >> H >> W; vector<string> grid(H); vector<vector<int>> inRow(H, vector<int>(26)); vector<vector<int>> inCol(W, vector<int>(26)); for (int row = 0; row < H; row++) { cin >> grid[row]; for (int col = 0; col < W; col++) { ++inRow[row][grid[row][col]-'A']; ++inCol[col][grid[row][col]-'A']; } } vector<pair<char, pair<int,char>>> operations; for (int rep = 0; rep < H + W; rep++) { for (int row = 0; row < H; row++) { int cnt = 0, letter = 0; for (int i = 0; i < 26; i++) { if (inRow[row][i]) { cnt++; letter = i; } } if (cnt == 1) { operations.push_back({'R', {row, 'A'+letter}}); for (int col = 0; col < W; col++) { if(grid[row][col]) { --inRow[row][grid[row][col]-'A']; --inCol[col][grid[row][col]-'A']; grid[row][col] = 0; } } } } for (int col = 0; col < W; col++) { int cnt = 0, letter = 0; for (int i = 0; i < 26; i++) { if (inCol[col][i]) { cnt++; letter = i; } } if (cnt == 1) { operations.push_back({'K', {col, 'A'+letter}}); for (int row = 0; row < H; row++) { if(grid[row][col]) { --inRow[row][grid[row][col]-'A']; --inCol[col][grid[row][col]-'A']; grid[row][col] = 0; } } } } } cout << operations.size() << "\n"; reverse(operations.begin(), operations.end()); for (auto p : operations) { cout << p.first << " " << p.second.first + 1 << " " << p.second.second << "\n"; } } |
English