#include <bits/stdc++.h> using namespace std; struct Move{ char dimension; char color; int which; }; int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n,m; cin >> n >> m; vector<vector<int>> rows_colors(n, vector<int> (27,0)); vector<vector<int>> cols_colors(m, vector<int> (27,0)); vector<Move> solution; string color; vector<vector<int>> puzzle(n, vector<int> (m)); for(int i = 0; i < n; i++) { cin >> color; for(int j = 0; j < m; j++) { char cr = color[j]; cols_colors[j][cr - 'A']++; rows_colors[i][cr - 'A']++; puzzle[i][j] = cr - 'A'; } } int done_count = 0; vector<bool> rows_done(n, false); vector<bool> cols_done(m, false); int x = 0; while(done_count < n*m) { for(int i = 0; i < n; i++) { for(int j = 0; j < 26; j++) { if(rows_colors[i][j] + rows_colors[i][26] == m && !rows_done[i]) { x++; rows_done[i] = 1; for(int k = 0; k < m; k++) { if(puzzle[i][k] != -1) { cols_colors[k][26]++; cols_colors[k][puzzle[i][k]]--; done_count++; puzzle[i][k] = -1; } } solution.push_back({'R', char(int('A') + j), i}); break; } } } if(done_count >= n*m) break; for(int i = 0; i < m; i++) { for(int j = 0; j < 26; j++) { if(cols_colors[i][j] + cols_colors[i][26] == n && !cols_done[i]) { x++; cols_done[i] = 1; for(int k = 0; k < n; k++) { if(puzzle[k][i] != -1) { rows_colors[k][26]++; rows_colors[k][puzzle[k][i]]--; done_count++; puzzle[k][i] = -1; } } solution.push_back({'K', 'A' + j, i}); break; } } } } cout << x << "\n"; for(int i = solution.size() - 1; i >= 0; i--) { cout << solution[i].dimension << " " << solution[i].which + 1 << " " << solution[i].color << "\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 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 | #include <bits/stdc++.h> using namespace std; struct Move{ char dimension; char color; int which; }; int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n,m; cin >> n >> m; vector<vector<int>> rows_colors(n, vector<int> (27,0)); vector<vector<int>> cols_colors(m, vector<int> (27,0)); vector<Move> solution; string color; vector<vector<int>> puzzle(n, vector<int> (m)); for(int i = 0; i < n; i++) { cin >> color; for(int j = 0; j < m; j++) { char cr = color[j]; cols_colors[j][cr - 'A']++; rows_colors[i][cr - 'A']++; puzzle[i][j] = cr - 'A'; } } int done_count = 0; vector<bool> rows_done(n, false); vector<bool> cols_done(m, false); int x = 0; while(done_count < n*m) { for(int i = 0; i < n; i++) { for(int j = 0; j < 26; j++) { if(rows_colors[i][j] + rows_colors[i][26] == m && !rows_done[i]) { x++; rows_done[i] = 1; for(int k = 0; k < m; k++) { if(puzzle[i][k] != -1) { cols_colors[k][26]++; cols_colors[k][puzzle[i][k]]--; done_count++; puzzle[i][k] = -1; } } solution.push_back({'R', char(int('A') + j), i}); break; } } } if(done_count >= n*m) break; for(int i = 0; i < m; i++) { for(int j = 0; j < 26; j++) { if(cols_colors[i][j] + cols_colors[i][26] == n && !cols_done[i]) { x++; cols_done[i] = 1; for(int k = 0; k < n; k++) { if(puzzle[k][i] != -1) { rows_colors[k][26]++; rows_colors[k][puzzle[k][i]]--; done_count++; puzzle[k][i] = -1; } } solution.push_back({'K', 'A' + j, i}); break; } } } } cout << x << "\n"; for(int i = solution.size() - 1; i >= 0; i--) { cout << solution[i].dimension << " " << solution[i].which + 1 << " " << solution[i].color << "\n"; } } |