#include <bits/stdc++.h> using namespace std; struct Event { bool type; int i, letter; }; int main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); int Y, X; cin >> Y >> X; vector<vector<int>> rows(Y, vector<int>(26, 0)); vector<vector<int>> cols(X, vector<int>(26, 0)); for (int y = 0; y < Y; y++) { string row; cin >> row; for (int x = 0; x < X; x++) { int letter = row[x] - 'A'; rows[y][letter]++; cols[x][letter]++; } } vector<Event> result; vector<bool> usedRow(Y, false); vector<bool> usedCol(X, false); int cy = Y, cx = X; while (true) { bool flag = false; for (int y = 0; y < Y; y++) for (int letter = 0; letter < 26; letter++) if (rows[y][letter] > 0 and not usedRow[y]) flag = true; for (int x = 0; x < X; x++) for (int letter = 0; letter < 26; letter++) if (cols[x][letter] > 0 and not usedCol[x]) flag = true; if (not flag) break; flag = false; for (int y = 0; y < Y; y++) { if (usedRow[y]) continue; for (int letter = 0; letter < 26; letter++) if (rows[y][letter] == cx) { for (int x = 0; x < X; x++) cols[x][letter]--; flag = true; usedRow[y] = true; cy--; result.push_back({false, y, letter}); break; } } if (flag) continue; for (int x = 0; x < X; x++) { if (usedCol[x]) continue; for (int letter = 0; letter < 26; letter++) if (cols[x][letter] == cy) { for (int y = 0; y < Y; y++) rows[y][letter]--; usedCol[x] = true; cx--; result.push_back({true, x, letter}); break; } } } reverse(result.begin(), result.end()); cout << result.size() << "\n"; for (auto &pair : result) cout << (pair.type ? "K " : "R ") << pair.i + 1 << " " << char(pair.letter + 'A') << "\n"; return 0; }
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 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 | #include <bits/stdc++.h> using namespace std; struct Event { bool type; int i, letter; }; int main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); int Y, X; cin >> Y >> X; vector<vector<int>> rows(Y, vector<int>(26, 0)); vector<vector<int>> cols(X, vector<int>(26, 0)); for (int y = 0; y < Y; y++) { string row; cin >> row; for (int x = 0; x < X; x++) { int letter = row[x] - 'A'; rows[y][letter]++; cols[x][letter]++; } } vector<Event> result; vector<bool> usedRow(Y, false); vector<bool> usedCol(X, false); int cy = Y, cx = X; while (true) { bool flag = false; for (int y = 0; y < Y; y++) for (int letter = 0; letter < 26; letter++) if (rows[y][letter] > 0 and not usedRow[y]) flag = true; for (int x = 0; x < X; x++) for (int letter = 0; letter < 26; letter++) if (cols[x][letter] > 0 and not usedCol[x]) flag = true; if (not flag) break; flag = false; for (int y = 0; y < Y; y++) { if (usedRow[y]) continue; for (int letter = 0; letter < 26; letter++) if (rows[y][letter] == cx) { for (int x = 0; x < X; x++) cols[x][letter]--; flag = true; usedRow[y] = true; cy--; result.push_back({false, y, letter}); break; } } if (flag) continue; for (int x = 0; x < X; x++) { if (usedCol[x]) continue; for (int letter = 0; letter < 26; letter++) if (cols[x][letter] == cy) { for (int y = 0; y < Y; y++) rows[y][letter]--; usedCol[x] = true; cx--; result.push_back({true, x, letter}); break; } } } reverse(result.begin(), result.end()); cout << result.size() << "\n"; for (auto &pair : result) cout << (pair.type ? "K " : "R ") << pair.i + 1 << " " << char(pair.letter + 'A') << "\n"; return 0; } |