#include <bits/stdc++.h> using namespace std; int zliczanie_w[2001][27]; int zliczanie_k[2001][27]; int n, m; vector<pair<bool, pair<int, char>>> odp; vector<vector<char>> tablica(2001); pair<int, char> znajdz_wiersz(){ for(int i=0; i<n; i++){ if(zliczanie_w[i][26]!=m){ for(int j=0; j<26; j++){ if(zliczanie_w[i][j]+zliczanie_w[i][26]==m) return {i, j}; } } } return {-1, '#'}; } bool zamien_wiersz(pair<int, char> x){ if(x.first==-1) return false; int w=x.first; char c=x.second; odp.push_back({0, x}); for(int i=0; i<m; i++){ zliczanie_k[i][tablica[w][i]]--; zliczanie_k[i][26]++; zliczanie_w[w][tablica[w][i]]--; tablica[w][i]=26; zliczanie_w[w][26]++; } return true; } pair<int, char> znajdz_kolumne(){ for(int i=0; i<m; i++){ if(zliczanie_k[i][26]!=n){ for(int j=0; j<26; j++){ if(zliczanie_k[i][j]+zliczanie_k[i][26]==n) return {i, j}; } } } return {-1, '#'}; } bool zamien_kolumne(pair<int, char> x){ if(x.first==-1) return false; int k=x.first; char c=x.second; odp.push_back({1, x}); for(int i=0; i<n; i++){ zliczanie_w[i][tablica[i][k]]--; zliczanie_w[i][26]++; zliczanie_k[k][tablica[i][k]]--; tablica[i][k]=26; zliczanie_k[k][26]++; } return true; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cin>>n>>m; char c; for(int i=0; i<n; i++){ for(int j=0; j<m; j++){ cin>>c; tablica[i].push_back(c-'A'); zliczanie_w[i][c-'A']++; zliczanie_k[j][c-'A']++; } } int zl=0; while(zamien_kolumne(znajdz_kolumne()) || zamien_wiersz(znajdz_wiersz())){ zl++; } cout<<odp.size()<<'\n'; for(int i=odp.size()-1; i>=0; i--){ if(odp[i].first){ cout<<"K "<<odp[i].second.first+1<<' '<<char(odp[i].second.second+'A')<<'\n'; } else{ cout<<"R "<<odp[i].second.first+1<<' '<<char(odp[i].second.second+'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 91 92 93 94 95 96 97 | #include <bits/stdc++.h> using namespace std; int zliczanie_w[2001][27]; int zliczanie_k[2001][27]; int n, m; vector<pair<bool, pair<int, char>>> odp; vector<vector<char>> tablica(2001); pair<int, char> znajdz_wiersz(){ for(int i=0; i<n; i++){ if(zliczanie_w[i][26]!=m){ for(int j=0; j<26; j++){ if(zliczanie_w[i][j]+zliczanie_w[i][26]==m) return {i, j}; } } } return {-1, '#'}; } bool zamien_wiersz(pair<int, char> x){ if(x.first==-1) return false; int w=x.first; char c=x.second; odp.push_back({0, x}); for(int i=0; i<m; i++){ zliczanie_k[i][tablica[w][i]]--; zliczanie_k[i][26]++; zliczanie_w[w][tablica[w][i]]--; tablica[w][i]=26; zliczanie_w[w][26]++; } return true; } pair<int, char> znajdz_kolumne(){ for(int i=0; i<m; i++){ if(zliczanie_k[i][26]!=n){ for(int j=0; j<26; j++){ if(zliczanie_k[i][j]+zliczanie_k[i][26]==n) return {i, j}; } } } return {-1, '#'}; } bool zamien_kolumne(pair<int, char> x){ if(x.first==-1) return false; int k=x.first; char c=x.second; odp.push_back({1, x}); for(int i=0; i<n; i++){ zliczanie_w[i][tablica[i][k]]--; zliczanie_w[i][26]++; zliczanie_k[k][tablica[i][k]]--; tablica[i][k]=26; zliczanie_k[k][26]++; } return true; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cin>>n>>m; char c; for(int i=0; i<n; i++){ for(int j=0; j<m; j++){ cin>>c; tablica[i].push_back(c-'A'); zliczanie_w[i][c-'A']++; zliczanie_k[j][c-'A']++; } } int zl=0; while(zamien_kolumne(znajdz_kolumne()) || zamien_wiersz(znajdz_wiersz())){ zl++; } cout<<odp.size()<<'\n'; for(int i=odp.size()-1; i>=0; i--){ if(odp[i].first){ cout<<"K "<<odp[i].second.first+1<<' '<<char(odp[i].second.second+'A')<<'\n'; } else{ cout<<"R "<<odp[i].second.first+1<<' '<<char(odp[i].second.second+'A')<<'\n'; } } return 0; } |