#include <bits/stdc++.h> using namespace std; struct kolor{ vector<int>k; kolor(){ for(int i=0;i<27;i++){ k.push_back(0); } }; }; struct polecenie{ int kol; int kier;//0->wiersz, 1->kolumna int y; polecenie(int a,int b,int c){ kol=a; kier=b; y=c; //cout<<kol<<" "<<kier<<" "<<y<<endl; } }; bool czy_puste(vector<set<int>>w,vector<set<int>>k,int n,int m){ for(int i=0;i<n;i++){ if(w[i].empty()==false){ return false; } } for(int i=0;i<m;i++){ if(k[i].empty()==false){ return false; } } return true; } int main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n,m; cin>>n>>m; vector<string>in; for(int i=0;i<n;i++){ string l; cin>>l; in.push_back(l); } map<char,int>na_liczby; for(int i=65;i<91;i++){ na_liczby[i]=i-65; } string alfabet="ABCDEFGHIJKLMNOPQRSTUVWXYZ"; vector<set<int>>kol(m); vector<set<int>>wier(n); vector<kolor>K(m); vector<kolor>W(n); vector<polecenie>ans; for(int i=0;i<n;i++){ for(int j=0;j<m;j++){ wier[i].insert(na_liczby[in[i][j]]); W[i].k[na_liczby[in[i][j]]]++; } } for(int i=0;i<m;i++){ for(int j=0;j<n;j++){ kol[i].insert(na_liczby[in[j][i]]); K[i].k[na_liczby[in[j][i]]]++; } } while(czy_puste(wier,kol,n,m)==false){ for(int i=0;i<n;i++){ if(wier[i].size()==1){ auto it=wier[i].begin(); int x=*it; //cout<<x<<endl; for(int j=0;j<m;j++){ K[j].k[(x)]--; if(K[j].k[(x)]<=0){ if(kol[j].find(x)!=kol[j].end()){ kol[j].erase(x); } } } wier[i].erase(x); polecenie p(x,0,i+1); ans.push_back(p); } } for(int i=0;i<m;i++){ if(kol[i].size()==1){ auto it=kol[i].begin(); //cout<<*it<<endl; int x=*it; for(int j=0;j<n;j++){ W[j].k[(x)]--; if(W[j].k[(x)]<=0){ if(wier[j].find(x)!=wier[j].end()){ wier[j].erase(x); } } } kol[i].erase(x); polecenie p(x,1,i+1); ans.push_back(p); } } } cout<<ans.size()<<'\n'; reverse(ans.begin(),ans.end()); for(int i=0;i<ans.size();i++){ if(ans[i].kier==0){ cout<<"R "; } else{ cout<<"K "; } cout<<ans[i].y<<" "; cout<<alfabet[ans[i].kol]<<'\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; struct kolor{ vector<int>k; kolor(){ for(int i=0;i<27;i++){ k.push_back(0); } }; }; struct polecenie{ int kol; int kier;//0->wiersz, 1->kolumna int y; polecenie(int a,int b,int c){ kol=a; kier=b; y=c; //cout<<kol<<" "<<kier<<" "<<y<<endl; } }; bool czy_puste(vector<set<int>>w,vector<set<int>>k,int n,int m){ for(int i=0;i<n;i++){ if(w[i].empty()==false){ return false; } } for(int i=0;i<m;i++){ if(k[i].empty()==false){ return false; } } return true; } int main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n,m; cin>>n>>m; vector<string>in; for(int i=0;i<n;i++){ string l; cin>>l; in.push_back(l); } map<char,int>na_liczby; for(int i=65;i<91;i++){ na_liczby[i]=i-65; } string alfabet="ABCDEFGHIJKLMNOPQRSTUVWXYZ"; vector<set<int>>kol(m); vector<set<int>>wier(n); vector<kolor>K(m); vector<kolor>W(n); vector<polecenie>ans; for(int i=0;i<n;i++){ for(int j=0;j<m;j++){ wier[i].insert(na_liczby[in[i][j]]); W[i].k[na_liczby[in[i][j]]]++; } } for(int i=0;i<m;i++){ for(int j=0;j<n;j++){ kol[i].insert(na_liczby[in[j][i]]); K[i].k[na_liczby[in[j][i]]]++; } } while(czy_puste(wier,kol,n,m)==false){ for(int i=0;i<n;i++){ if(wier[i].size()==1){ auto it=wier[i].begin(); int x=*it; //cout<<x<<endl; for(int j=0;j<m;j++){ K[j].k[(x)]--; if(K[j].k[(x)]<=0){ if(kol[j].find(x)!=kol[j].end()){ kol[j].erase(x); } } } wier[i].erase(x); polecenie p(x,0,i+1); ans.push_back(p); } } for(int i=0;i<m;i++){ if(kol[i].size()==1){ auto it=kol[i].begin(); //cout<<*it<<endl; int x=*it; for(int j=0;j<n;j++){ W[j].k[(x)]--; if(W[j].k[(x)]<=0){ if(wier[j].find(x)!=wier[j].end()){ wier[j].erase(x); } } } kol[i].erase(x); polecenie p(x,1,i+1); ans.push_back(p); } } } cout<<ans.size()<<'\n'; reverse(ans.begin(),ans.end()); for(int i=0;i<ans.size();i++){ if(ans[i].kier==0){ cout<<"R "; } else{ cout<<"K "; } cout<<ans[i].y<<" "; cout<<alfabet[ans[i].kol]<<'\n'; } } |