#include <iostream> #include <vector> #include <algorithm> using namespace std; char inp[2002][2002]; struct dane{ int suma; char znak; int pol; }; struct out{ char typ; int i; char kolor; }; bool comp(dane x, dane y){ return (y.suma < x.suma); } int tab[26]; vector<dane>R; vector<dane>K; vector<out>wynik; int Rk[2002][26]; int Kk[2002][26]; int main(){ int n,m; string a; cin>>n>>m; for(int i=0;i<=n;i++){ for(int j=0;j<26;j++)Rk[i][j]=m; } for(int j=0;j<=m;j++){ for(int i=0;i<26;i++) Kk[j][i]=n; } for(int i=0;i<n;i++){ cin>>a; for(int j=0;j<m;j++) inp[i][j]=a[j]; } for(int i=0;i<n;i++){ for(int j=0;j<m;j++){ tab[inp[i][j]-'A']++; } for(int j=0;j<26;j++){ if(tab[j]>0){ dane temp={tab[j],j+'A',i}; R.push_back(temp); } } for(int j=0;j<26;j++)tab[j]=0; } for(int j=0;j<m;j++){ for(int i=0;i<n;i++){ tab[inp[i][j]-'A']++; } for(int i=0;i<26;i++){ if(tab[i]>0){ dane temp={tab[i],i+'A',j}; K.push_back(temp); } } for(int i=0;i<26;i++)tab[i]=0; }//cout<<"h"; sort(R.begin(), R.end(), comp); sort(K.begin(), K.end(), comp); // cout<<"h"; int si=-1, sj=-1; for(int i=0,j=0;;){; if(i<R.size()&&R[i].suma>=Rk[R[i].pol][R[i].znak-'A']){ out temp={'R', R[i].pol, R[i].znak}; wynik.push_back(temp); for(int l=0;l<=m;l++){ for(int t=0;t<26;t++){ if(R[i].znak-'A'!=t)Kk[l][t]--; } } i++; } if(j<K.size()&&K[j].suma>=Kk[K[j].pol][R[j].znak-'A']){ out temp={'K', K[j].pol, K[j].znak}; wynik.push_back(temp); for(int l=0;l<=n;l++){ for(int t=0;t<26;t++) if(K[j].znak-'A'!=t)Rk[l][t]--; } j++; } if(i>=R.size()&&j>=K.size())break; if(i==si&&j==sj){ R.push_back(R[i]); K.push_back(K[j]); i++,j++; } si=i, sj=j; } cout<<wynik.size()<<"\n"; for(int i=wynik.size()-1;i>=0;i--){ cout<<wynik[i].typ<<" "<<wynik[i].i+1<<" "<<wynik[i].kolor<<"\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 | #include <iostream> #include <vector> #include <algorithm> using namespace std; char inp[2002][2002]; struct dane{ int suma; char znak; int pol; }; struct out{ char typ; int i; char kolor; }; bool comp(dane x, dane y){ return (y.suma < x.suma); } int tab[26]; vector<dane>R; vector<dane>K; vector<out>wynik; int Rk[2002][26]; int Kk[2002][26]; int main(){ int n,m; string a; cin>>n>>m; for(int i=0;i<=n;i++){ for(int j=0;j<26;j++)Rk[i][j]=m; } for(int j=0;j<=m;j++){ for(int i=0;i<26;i++) Kk[j][i]=n; } for(int i=0;i<n;i++){ cin>>a; for(int j=0;j<m;j++) inp[i][j]=a[j]; } for(int i=0;i<n;i++){ for(int j=0;j<m;j++){ tab[inp[i][j]-'A']++; } for(int j=0;j<26;j++){ if(tab[j]>0){ dane temp={tab[j],j+'A',i}; R.push_back(temp); } } for(int j=0;j<26;j++)tab[j]=0; } for(int j=0;j<m;j++){ for(int i=0;i<n;i++){ tab[inp[i][j]-'A']++; } for(int i=0;i<26;i++){ if(tab[i]>0){ dane temp={tab[i],i+'A',j}; K.push_back(temp); } } for(int i=0;i<26;i++)tab[i]=0; }//cout<<"h"; sort(R.begin(), R.end(), comp); sort(K.begin(), K.end(), comp); // cout<<"h"; int si=-1, sj=-1; for(int i=0,j=0;;){; if(i<R.size()&&R[i].suma>=Rk[R[i].pol][R[i].znak-'A']){ out temp={'R', R[i].pol, R[i].znak}; wynik.push_back(temp); for(int l=0;l<=m;l++){ for(int t=0;t<26;t++){ if(R[i].znak-'A'!=t)Kk[l][t]--; } } i++; } if(j<K.size()&&K[j].suma>=Kk[K[j].pol][R[j].znak-'A']){ out temp={'K', K[j].pol, K[j].znak}; wynik.push_back(temp); for(int l=0;l<=n;l++){ for(int t=0;t<26;t++) if(K[j].znak-'A'!=t)Rk[l][t]--; } j++; } if(i>=R.size()&&j>=K.size())break; if(i==si&&j==sj){ R.push_back(R[i]); K.push_back(K[j]); i++,j++; } si=i, sj=j; } cout<<wynik.size()<<"\n"; for(int i=wynik.size()-1;i>=0;i--){ cout<<wynik[i].typ<<" "<<wynik[i].i+1<<" "<<wynik[i].kolor<<"\n"; } } |