#include<bits/stdc++.h> using namespace std; int kol[2004][30],row[2004][30]; int lrozkol[2004],lrozrow[2004]; int main() { ios_base::sync_with_stdio(0); cin.tie(0); int n,m; cin>>n>>m; queue<int> dorozpk,dorozpr; for(int i=1;i<=n;i++) { string inp; cin>>inp; for(int j=0; j<inp.size(); j++){ int inkol=inp[j]-'A'+1; if(kol[j+1][inkol]==0){ lrozkol[j+1]++; } kol[j+1][inkol]++; if(row[i][inkol]==0) lrozrow[i]++; row[i][inkol]++; } if(lrozrow[i]==1){ dorozpr.push(i); } } for(int i=1;i<=m;i++){ if(lrozkol[i]==1){ dorozpk.push(i); } } vector<int>wynk,wynind; vector<char>wyntyp; // for(int i=1;i<=n;i++){ // cout<<lrozrow[i]<<" "; // } // cout<<"\n"; // for(int i=1;i<=m;i++){ // cout<<lrozkol[i]<<" "; // } // cout<<"\n"; // while(!dorozpr.empty()){ // cout<<dorozpr.front()<<" "; // dorozpr.pop(); // } // cout<<"\n"; // while(!dorozpk.empty()){ // cout<<dorozpk.front()<<" "; // dorozpk.pop(); // } while(!dorozpr.empty()||!dorozpk.empty()){ while(!dorozpr.empty()){ int currow=dorozpr.front(); dorozpr.pop(); int uskol=-1; for(int i=1;i<27;i++){ if(row[currow][i]>0){ uskol=i; } } if(uskol==-1){ continue; } row[currow][uskol]=0; lrozrow[currow]=0; for(int j=1; j<=m; j++){ kol[j][uskol]--; if(kol[j][uskol]==0){ lrozkol[j]--; } if(lrozkol[j]==1){ dorozpk.push(j); } } wynk.push_back(uskol); wyntyp.push_back('R'); wynind.push_back(currow); } while(!dorozpk.empty()){ int curkol=dorozpk.front(); dorozpk.pop(); int uskol=-1; for(int i=1;i<27;i++){ if(kol[curkol][i]>0){ uskol=i; } } if(uskol==-1){ continue; } kol[curkol][uskol]=0; lrozkol[curkol]=0; for(int i=1; i<=n; i++){ row[i][uskol]--; if(row[i][uskol]==0){ lrozrow[i]--; } if(lrozrow[i]==1){ dorozpr.push(i); } } wynk.push_back(uskol); wyntyp.push_back('K'); wynind.push_back(curkol); } } cout<<wyntyp.size()<<"\n"; reverse(wynk.begin(),wynk.end()); reverse(wyntyp.begin(),wyntyp.end()); reverse(wynind.begin(),wynind.end()); for(int i=0; i<wyntyp.size(); i++){ cout<<wyntyp[i]<<" "<<wynind[i]<<" "<<char((wynk[i]-1)+'A')<<"\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 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 | #include<bits/stdc++.h> using namespace std; int kol[2004][30],row[2004][30]; int lrozkol[2004],lrozrow[2004]; int main() { ios_base::sync_with_stdio(0); cin.tie(0); int n,m; cin>>n>>m; queue<int> dorozpk,dorozpr; for(int i=1;i<=n;i++) { string inp; cin>>inp; for(int j=0; j<inp.size(); j++){ int inkol=inp[j]-'A'+1; if(kol[j+1][inkol]==0){ lrozkol[j+1]++; } kol[j+1][inkol]++; if(row[i][inkol]==0) lrozrow[i]++; row[i][inkol]++; } if(lrozrow[i]==1){ dorozpr.push(i); } } for(int i=1;i<=m;i++){ if(lrozkol[i]==1){ dorozpk.push(i); } } vector<int>wynk,wynind; vector<char>wyntyp; // for(int i=1;i<=n;i++){ // cout<<lrozrow[i]<<" "; // } // cout<<"\n"; // for(int i=1;i<=m;i++){ // cout<<lrozkol[i]<<" "; // } // cout<<"\n"; // while(!dorozpr.empty()){ // cout<<dorozpr.front()<<" "; // dorozpr.pop(); // } // cout<<"\n"; // while(!dorozpk.empty()){ // cout<<dorozpk.front()<<" "; // dorozpk.pop(); // } while(!dorozpr.empty()||!dorozpk.empty()){ while(!dorozpr.empty()){ int currow=dorozpr.front(); dorozpr.pop(); int uskol=-1; for(int i=1;i<27;i++){ if(row[currow][i]>0){ uskol=i; } } if(uskol==-1){ continue; } row[currow][uskol]=0; lrozrow[currow]=0; for(int j=1; j<=m; j++){ kol[j][uskol]--; if(kol[j][uskol]==0){ lrozkol[j]--; } if(lrozkol[j]==1){ dorozpk.push(j); } } wynk.push_back(uskol); wyntyp.push_back('R'); wynind.push_back(currow); } while(!dorozpk.empty()){ int curkol=dorozpk.front(); dorozpk.pop(); int uskol=-1; for(int i=1;i<27;i++){ if(kol[curkol][i]>0){ uskol=i; } } if(uskol==-1){ continue; } kol[curkol][uskol]=0; lrozkol[curkol]=0; for(int i=1; i<=n; i++){ row[i][uskol]--; if(row[i][uskol]==0){ lrozrow[i]--; } if(lrozrow[i]==1){ dorozpr.push(i); } } wynk.push_back(uskol); wyntyp.push_back('K'); wynind.push_back(curkol); } } cout<<wyntyp.size()<<"\n"; reverse(wynk.begin(),wynk.end()); reverse(wyntyp.begin(),wyntyp.end()); reverse(wynind.begin(),wynind.end()); for(int i=0; i<wyntyp.size(); i++){ cout<<wyntyp[i]<<" "<<wynind[i]<<" "<<char((wynk[i]-1)+'A')<<"\n"; } } |