#include <bits/stdc++.h> using namespace std; int ascii(char a); int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); int n,m,numer; cin >> n >> m; vector<vector<int>>wiersze(n,vector<int>(26)); vector<vector<int>>kolumny(m,vector<int>(26)); vector<bool>w(n,false); vector<bool>k(m,false); vector<string>dane(n); string a; for(int i=0; i<n; i++){ cin >> a; dane[i]=a; for(int j=0; j<a.length();j++){ numer = a[j] - 65; wiersze[i][numer]++; kolumny[j][numer]++; } } vector<pair<bool, pair<int,char>>>wynik; // prawda jesli wiersz bool znalazl; int p; while(true){ znalazl = false; for(int i=0; i<n;i++){ p=-1; if(!w[i]){ for(int j=0; j<26; j++){ if(wiersze[i][j]>0){ if(p!=-1){ p = -1; j=26; }else{ p = j; } } } if(p!=-1){ wynik.push_back(make_pair(true,make_pair(i+1,p+65))); znalazl = true; w[i] = true; for(int j=0; j<m;j++){ numer = dane[i][j] - 65; kolumny[j][numer]--; } i=n; } } } if(!znalazl){ for(int i=0; i<m;i++){ p=-1; if(!k[i]){ for(int j=0; j<26; j++){ if(kolumny[i][j]>0){ if(p!=-1){ p = -1; j=26; }else{ p = j; } } } if(p!=-1){ wynik.push_back(make_pair(false,make_pair(i+1,p+65))); znalazl = true; k[i]=true; for(int j=0; j<n;j++){ numer = dane[j][i] - 65; wiersze[j][numer]--; } i=m; } } } } if(!znalazl)break; } cout << wynik.size() << endl; for(int i=(wynik.size()-1);i>=0;i--){ if(wynik[i].first){ cout << "R" << " " << wynik[i].second.first << " " << wynik[i].second.second << endl; }else{ cout << "K" << " " << wynik[i].second.first << " " << wynik[i].second.second << endl; } } 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 | #include <bits/stdc++.h> using namespace std; int ascii(char a); int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); int n,m,numer; cin >> n >> m; vector<vector<int>>wiersze(n,vector<int>(26)); vector<vector<int>>kolumny(m,vector<int>(26)); vector<bool>w(n,false); vector<bool>k(m,false); vector<string>dane(n); string a; for(int i=0; i<n; i++){ cin >> a; dane[i]=a; for(int j=0; j<a.length();j++){ numer = a[j] - 65; wiersze[i][numer]++; kolumny[j][numer]++; } } vector<pair<bool, pair<int,char>>>wynik; // prawda jesli wiersz bool znalazl; int p; while(true){ znalazl = false; for(int i=0; i<n;i++){ p=-1; if(!w[i]){ for(int j=0; j<26; j++){ if(wiersze[i][j]>0){ if(p!=-1){ p = -1; j=26; }else{ p = j; } } } if(p!=-1){ wynik.push_back(make_pair(true,make_pair(i+1,p+65))); znalazl = true; w[i] = true; for(int j=0; j<m;j++){ numer = dane[i][j] - 65; kolumny[j][numer]--; } i=n; } } } if(!znalazl){ for(int i=0; i<m;i++){ p=-1; if(!k[i]){ for(int j=0; j<26; j++){ if(kolumny[i][j]>0){ if(p!=-1){ p = -1; j=26; }else{ p = j; } } } if(p!=-1){ wynik.push_back(make_pair(false,make_pair(i+1,p+65))); znalazl = true; k[i]=true; for(int j=0; j<n;j++){ numer = dane[j][i] - 65; wiersze[j][numer]--; } i=m; } } } } if(!znalazl)break; } cout << wynik.size() << endl; for(int i=(wynik.size()-1);i>=0;i--){ if(wynik[i].first){ cout << "R" << " " << wynik[i].second.first << " " << wynik[i].second.second << endl; }else{ cout << "K" << " " << wynik[i].second.first << " " << wynik[i].second.second << endl; } } return 0; } |