#include <bits/stdc++.h> using namespace std; int A[2001][2001], R[2001][27], K[2001][27], a, b, k=1, x, y; set <int> rz[2001]; set <int> ko[2001]; string q; int od[4001][3]; int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin>>a>>b; x=a; y=b; for(int i=0; i<a; ++i){ cin>>q; for(int j=0; j<b; ++j){ A[i][j]=(int)q[j] - 64; rz[i].insert(A[i][j]); ko[j].insert(A[i][j]); R[i][A[i][j]]++; K[j][A[i][j]]++; } if(rz[i].size()==1){ x--; od[k][0]=82; od[k][1]=i+1; od[k][2]=*rz[i].begin(); rz[i].clear(); for(int j=0; j<b; ++j){ K[j][od[k][2]]--; if(K[j][od[k][2]]==0){ ko[j].erase(od[k][2]); } } ++k; } } while( x>0 && y>0){ for(int j=0; j<b; ++j){ if(ko[j].size()==1){ y--; od[k][0]=75; od[k][1]=j+1; od[k][2]=*ko[j].begin(); ko[j].clear(); for(int i=0; i<a; ++i){ R[i][od[k][2]]--; if(R[i][od[k][2]]==0){ rz[i].erase(od[k][2]); } } ++k; } } for(int i=0; i<a; ++i){ if(rz[i].size()==1){ x--; od[k][0]=82; od[k][1]=i+1; od[k][2]=*rz[i].begin(); rz[i].clear(); for(int j=0; j<b; ++j){ K[j][od[k][2]]--; if(K[j][od[k][2]]==0){ ko[j].erase(od[k][2]); } } ++k; } } } --k; cout<<k<<"\n"; while(k){ cout<<(char)od[k][0]<<" "<<od[k][1]<<" "<<(char)(64+od[k][2])<<"\n"; --k; } 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 | #include <bits/stdc++.h> using namespace std; int A[2001][2001], R[2001][27], K[2001][27], a, b, k=1, x, y; set <int> rz[2001]; set <int> ko[2001]; string q; int od[4001][3]; int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin>>a>>b; x=a; y=b; for(int i=0; i<a; ++i){ cin>>q; for(int j=0; j<b; ++j){ A[i][j]=(int)q[j] - 64; rz[i].insert(A[i][j]); ko[j].insert(A[i][j]); R[i][A[i][j]]++; K[j][A[i][j]]++; } if(rz[i].size()==1){ x--; od[k][0]=82; od[k][1]=i+1; od[k][2]=*rz[i].begin(); rz[i].clear(); for(int j=0; j<b; ++j){ K[j][od[k][2]]--; if(K[j][od[k][2]]==0){ ko[j].erase(od[k][2]); } } ++k; } } while( x>0 && y>0){ for(int j=0; j<b; ++j){ if(ko[j].size()==1){ y--; od[k][0]=75; od[k][1]=j+1; od[k][2]=*ko[j].begin(); ko[j].clear(); for(int i=0; i<a; ++i){ R[i][od[k][2]]--; if(R[i][od[k][2]]==0){ rz[i].erase(od[k][2]); } } ++k; } } for(int i=0; i<a; ++i){ if(rz[i].size()==1){ x--; od[k][0]=82; od[k][1]=i+1; od[k][2]=*rz[i].begin(); rz[i].clear(); for(int j=0; j<b; ++j){ K[j][od[k][2]]--; if(K[j][od[k][2]]==0){ ko[j].erase(od[k][2]); } } ++k; } } } --k; cout<<k<<"\n"; while(k){ cout<<(char)od[k][0]<<" "<<od[k][1]<<" "<<(char)(64+od[k][2])<<"\n"; --k; } return 0; } |