#include <bits/stdc++.h>
using namespace std;
int wys[5000][26];
int kol[5000];
queue <pair<int,char> > p;
stack <pair<int,char> > odp;
int main(){
int n,m,a,b,x;
char zn;
cin>>n>>m;
char T[n+1][m+1];
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>T[i][j];
wys[i][ T[i][j]-'A' ]++;
if(wys[i][ T[i][j]-'A' ]==1) kol[i]++;
wys[n+j][ T[i][j]-'A' ]++;
if(wys[n+j][ T[i][j]-'A' ]==1) kol[n+j]++;
}
}
/*
for(int i=1;i<=n;i++){
cout<<kol[i]<<" ";
}
cout<<endl;
for(int i=n+1;i<=n+m;i++){
cout<<kol[i]<<" ";
}
cout<<endl;
*/
for(int i=1;i<=n+m;i++){
if(kol[i]==1){
for(int j=0;j<26;j++){
if(wys[i][j]!=0){
a = j;
break;
}
}
zn = a +'A';
p.push(make_pair(i,zn));
}
}
while(p.size()>0){
a = p.front().first;
zn = p.front().second;
p.pop();
odp.push(make_pair(a,zn));
/*
cout<<a<<" "<<zn<<endl;
for(int k=1;k<=n+m;k++){
cout<<kol[k]<<" ";
}
cout<<endl<<"*"<<endl;
for(int k=0;k<26;k++){
for(int l=1;l<=n+m;l++){
cout<<wys[l][k]<<" ";
}
cout<<endl;
}
cout<<"---"<<endl;
*/
for(int i=0;i<26;i++){
wys[a][i] = 0;
}
kol[a] = 0;
if(a<=n){
for(int i=1;i<=m;i++){
wys[n+i][ T[a][i]-'A' ]--;
if(wys[n+i][ T[a][i]-'A' ] == 0){
kol[n+i]--;
if(kol[n+i]==1){
for(int j=0;j<26;j++){
if(wys[n+i][j]!=0){
b = j;
break;
}
}
zn = b +'A';
p.push(make_pair(i+n,zn));
}
}
}
}else{
for(int i=1;i<=n;i++){
wys[i][ T[i][a-n]-'A' ]--;
if(wys[i][ T[i][a-n]-'A' ] == 0){
kol[i]--;
if(kol[i]==1){
for(int j=0;j<26;j++){
if(wys[i][j]!=0){
b = j;
break;
}
}
zn = b +'A';
p.push(make_pair(i,zn));
}
}
}
}
}
cout<<odp.size()<<endl;
while(odp.size()>0){
if(odp.top().first <= n){
cout<<"R "<<odp.top().first<<" "<<odp.top().second<<endl;
}else{
cout<<"K "<<odp.top().first-n<<" "<<odp.top().second<<endl;
}
odp.pop();
}
}
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 120 121 | #include <bits/stdc++.h> using namespace std; int wys[5000][26]; int kol[5000]; queue <pair<int,char> > p; stack <pair<int,char> > odp; int main(){ int n,m,a,b,x; char zn; cin>>n>>m; char T[n+1][m+1]; for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ cin>>T[i][j]; wys[i][ T[i][j]-'A' ]++; if(wys[i][ T[i][j]-'A' ]==1) kol[i]++; wys[n+j][ T[i][j]-'A' ]++; if(wys[n+j][ T[i][j]-'A' ]==1) kol[n+j]++; } } /* for(int i=1;i<=n;i++){ cout<<kol[i]<<" "; } cout<<endl; for(int i=n+1;i<=n+m;i++){ cout<<kol[i]<<" "; } cout<<endl; */ for(int i=1;i<=n+m;i++){ if(kol[i]==1){ for(int j=0;j<26;j++){ if(wys[i][j]!=0){ a = j; break; } } zn = a +'A'; p.push(make_pair(i,zn)); } } while(p.size()>0){ a = p.front().first; zn = p.front().second; p.pop(); odp.push(make_pair(a,zn)); /* cout<<a<<" "<<zn<<endl; for(int k=1;k<=n+m;k++){ cout<<kol[k]<<" "; } cout<<endl<<"*"<<endl; for(int k=0;k<26;k++){ for(int l=1;l<=n+m;l++){ cout<<wys[l][k]<<" "; } cout<<endl; } cout<<"---"<<endl; */ for(int i=0;i<26;i++){ wys[a][i] = 0; } kol[a] = 0; if(a<=n){ for(int i=1;i<=m;i++){ wys[n+i][ T[a][i]-'A' ]--; if(wys[n+i][ T[a][i]-'A' ] == 0){ kol[n+i]--; if(kol[n+i]==1){ for(int j=0;j<26;j++){ if(wys[n+i][j]!=0){ b = j; break; } } zn = b +'A'; p.push(make_pair(i+n,zn)); } } } }else{ for(int i=1;i<=n;i++){ wys[i][ T[i][a-n]-'A' ]--; if(wys[i][ T[i][a-n]-'A' ] == 0){ kol[i]--; if(kol[i]==1){ for(int j=0;j<26;j++){ if(wys[i][j]!=0){ b = j; break; } } zn = b +'A'; p.push(make_pair(i,zn)); } } } } } cout<<odp.size()<<endl; while(odp.size()>0){ if(odp.top().first <= n){ cout<<"R "<<odp.top().first<<" "<<odp.top().second<<endl; }else{ cout<<"K "<<odp.top().first-n<<" "<<odp.top().second<<endl; } odp.pop(); } } |
English