#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"; } } |
English