#include <iostream> #include <map> #include <vector> #include <queue> #include <algorithm> using namespace std; map<int,int> kol[2'007]; map<int,int> rze[2'007]; vector<pair<char,pair<int,char> > > rozkaz; int tab[2'007][2'007]; queue<pair<int,int> > kolej; int main() { ios_base::sync_with_stdio(0); cout.tie(0); cin.tie(0); string s; int n, m, p; cin>>n>>m; for(int a=0; a<n; a++) { cin>>s; for(int i=0; i<m; i++) tab[a][i]=(s[i]-'A'+1); } for(int a=0; a<n; a++){ for(int i=0; i<m; i++) rze[a][tab[a][i]]++; } for(int a=0; a<m; a++){ for(int i=0; i<n; i++) kol[a][tab[i][a]]++; } /*for(int a=0; a<n; a++) cout<<rze[a].size()<<" "; cout<<endl; for(int a=0; a<m; a++) cout<<kol[a].size()<<" ";*/ for(int a=0; a<n; a++){ if(rze[a].size()==1){ kolej.push({0,a}); rozkaz.push_back({'R',{a+1,char((rze[a].begin()->first)+'A'-1)}}); rze[a].clear(); } } for(int a=0; a<m; a++){ if(kol[a].size()==1){ kolej.push({1,a}); rozkaz.push_back({'K',{a+1,char((kol[a].begin()->first)+'A'-1)}}); kol[a].clear(); } } while(!kolej.empty()) { p=kolej.front().second; if(kolej.front().first==0) { kolej.pop(); for(int a=0; a<m; a++) { kol[a][tab[p][a]]--; if(kol[a][tab[p][a]]<1) kol[a].erase(tab[p][a]); if(kol[a].size()==1){ kolej.push({1,a}); rozkaz.push_back({'K',{a+1,char((kol[a].begin()->first)+'A'-1)}}); kol[a].clear(); } } } else { kolej.pop(); for(int a=0; a<n; a++) { rze[a][tab[a][p]]--; if(rze[a][tab[a][p]]<1) rze[a].erase(tab[a][p]); if(rze[a].size()==1){ kolej.push({0,a}); rozkaz.push_back({'R',{a+1,char((rze[a].begin()->first)+'A'-1)}}); rze[a].clear(); } } } } reverse(rozkaz.begin() , rozkaz.end()); cout<<rozkaz.size()<<"\n"; for(int a=0; a<rozkaz.size(); a++) cout<<rozkaz[a].first<<" "<<rozkaz[a].second.first<<" "<<rozkaz[a].second.second<<"\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 | #include <iostream> #include <map> #include <vector> #include <queue> #include <algorithm> using namespace std; map<int,int> kol[2'007]; map<int,int> rze[2'007]; vector<pair<char,pair<int,char> > > rozkaz; int tab[2'007][2'007]; queue<pair<int,int> > kolej; int main() { ios_base::sync_with_stdio(0); cout.tie(0); cin.tie(0); string s; int n, m, p; cin>>n>>m; for(int a=0; a<n; a++) { cin>>s; for(int i=0; i<m; i++) tab[a][i]=(s[i]-'A'+1); } for(int a=0; a<n; a++){ for(int i=0; i<m; i++) rze[a][tab[a][i]]++; } for(int a=0; a<m; a++){ for(int i=0; i<n; i++) kol[a][tab[i][a]]++; } /*for(int a=0; a<n; a++) cout<<rze[a].size()<<" "; cout<<endl; for(int a=0; a<m; a++) cout<<kol[a].size()<<" ";*/ for(int a=0; a<n; a++){ if(rze[a].size()==1){ kolej.push({0,a}); rozkaz.push_back({'R',{a+1,char((rze[a].begin()->first)+'A'-1)}}); rze[a].clear(); } } for(int a=0; a<m; a++){ if(kol[a].size()==1){ kolej.push({1,a}); rozkaz.push_back({'K',{a+1,char((kol[a].begin()->first)+'A'-1)}}); kol[a].clear(); } } while(!kolej.empty()) { p=kolej.front().second; if(kolej.front().first==0) { kolej.pop(); for(int a=0; a<m; a++) { kol[a][tab[p][a]]--; if(kol[a][tab[p][a]]<1) kol[a].erase(tab[p][a]); if(kol[a].size()==1){ kolej.push({1,a}); rozkaz.push_back({'K',{a+1,char((kol[a].begin()->first)+'A'-1)}}); kol[a].clear(); } } } else { kolej.pop(); for(int a=0; a<n; a++) { rze[a][tab[a][p]]--; if(rze[a][tab[a][p]]<1) rze[a].erase(tab[a][p]); if(rze[a].size()==1){ kolej.push({0,a}); rozkaz.push_back({'R',{a+1,char((rze[a].begin()->first)+'A'-1)}}); rze[a].clear(); } } } } reverse(rozkaz.begin() , rozkaz.end()); cout<<rozkaz.size()<<"\n"; for(int a=0; a<rozkaz.size(); a++) cout<<rozkaz[a].first<<" "<<rozkaz[a].second.first<<" "<<rozkaz[a].second.second<<"\n"; } |