#include <bits/stdc++.h> using namespace std; int n,m,wie[2007][100],kol[2007][100],rozwie[2007],rozkol[2007]; char x,ch[20007][2007]; pair<int,int> a; vector <pair<int,int>> v; queue <pair<int,int>> q; int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin >> n >> m; for(int i=1; i<=n; i++) { for(int j=1; j<=m; j++) { cin >> x; ch[i][j]=x; if(wie[i][x]==0) rozwie[i]++; wie[i][x]++; if(kol[j][x]==0) rozkol[j]++; kol[j][x]++; } } for(int i=1; i<=n; i++) { if(rozwie[i]==1) { rozwie[i]=-1; q.push({i,1}); } } for(int i=1; i<=m; i++) { if(rozkol[i]==1) { rozkol[i]=-1; q.push({i,2}); } } while(!q.empty()) { a=q.front(); //cout << a.first << ' ' << a.second << '\n'; q.pop(); if(a.second==1) { for(int i='A'; i<='Z'; i++) { if(wie[a.first][i]!=0) { v.push_back({a.first,i}); break; } } for(int i=1; i<=m; i++) { kol[i][ch[a.first][i]]--; if(kol[i][ch[a.first][i]]==0) rozkol[i]--; if(rozkol[i]==1) { rozkol[i]=-1; q.push({i,2}); } } } else { rozkol[a.first]=-1; for(int i='A'; i<='Z'; i++) { if(kol[a.first][i]!=0) { v.push_back({-a.first,i}); break; } } for(int i=1; i<=n; i++) { wie[i][ch[i][a.first]]--; if(wie[i][ch[i][a.first]]==0) rozwie[i]--; if(rozwie[i]==1) { rozwie[i]=-1; q.push({i,1}); } } } } cout << v.size() << '\n'; for(int i=v.size()-1; i>=0; i--) { if(v[i].first>0) cout << "R " << v[i].first << " " << char(v[i].second) << '\n'; else cout << "K " << -v[i].first << " " << char(v[i].second) << '\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 98 99 100 101 102 103 104 105 106 | #include <bits/stdc++.h> using namespace std; int n,m,wie[2007][100],kol[2007][100],rozwie[2007],rozkol[2007]; char x,ch[20007][2007]; pair<int,int> a; vector <pair<int,int>> v; queue <pair<int,int>> q; int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin >> n >> m; for(int i=1; i<=n; i++) { for(int j=1; j<=m; j++) { cin >> x; ch[i][j]=x; if(wie[i][x]==0) rozwie[i]++; wie[i][x]++; if(kol[j][x]==0) rozkol[j]++; kol[j][x]++; } } for(int i=1; i<=n; i++) { if(rozwie[i]==1) { rozwie[i]=-1; q.push({i,1}); } } for(int i=1; i<=m; i++) { if(rozkol[i]==1) { rozkol[i]=-1; q.push({i,2}); } } while(!q.empty()) { a=q.front(); //cout << a.first << ' ' << a.second << '\n'; q.pop(); if(a.second==1) { for(int i='A'; i<='Z'; i++) { if(wie[a.first][i]!=0) { v.push_back({a.first,i}); break; } } for(int i=1; i<=m; i++) { kol[i][ch[a.first][i]]--; if(kol[i][ch[a.first][i]]==0) rozkol[i]--; if(rozkol[i]==1) { rozkol[i]=-1; q.push({i,2}); } } } else { rozkol[a.first]=-1; for(int i='A'; i<='Z'; i++) { if(kol[a.first][i]!=0) { v.push_back({-a.first,i}); break; } } for(int i=1; i<=n; i++) { wie[i][ch[i][a.first]]--; if(wie[i][ch[i][a.first]]==0) rozwie[i]--; if(rozwie[i]==1) { rozwie[i]=-1; q.push({i,1}); } } } } cout << v.size() << '\n'; for(int i=v.size()-1; i>=0; i--) { if(v[i].first>0) cout << "R " << v[i].first << " " << char(v[i].second) << '\n'; else cout << "K " << -v[i].first << " " << char(v[i].second) << '\n'; } return 0; } |