#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(); } } |