#include <bits/stdc++.h> #define pb push_back #define s second #define f first using namespace std; int n,m, tab[2009][2009], roz, ilr[2009][29],ilk[2009][29],k,r,act; int ir[29], ik[29]; vector <int> kol; bool zero, vis[29]; char a; stack <pair<char,pair<int,char>>> s; queue <pair<int,int>> q; int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin>>n>>m; for (int i=0; i<n; i++){ for (int j=0; j<m; j++){ cin>>a; tab[i][j]=a-65; if (!vis[tab[i][j]]){ kol.pb(tab[i][j]); vis[tab[i][j]]=1; } ilr[i][tab[i][j]]++; } } for (int j=0; j<m; j++){ for (int i=0; i<n; i++){ ilk[j][tab[i][j]]++; } } for (int j=0; j<m; j++){ for (int i=0; i<kol.size(); i++){ if (ilk[j][kol[j]]!=0) ik[j]++; } } for (int j=0; j<n; j++){ for (int i=0; i<kol.size(); i++){ if (ilr[j][kol[j]]!=0) ir[j]++; } } for (int i=0; i<n; i++){ //rzędy if (ir[i]==1){ q.push({0,i}); } } for (int i=0; i<m; i++){ //kolumny if (ik[i]==1){ q.push({1,i}); } } //cout<<q.front().f<<" "<<q.front().s<<endl; while (true) { if (q.front().f==0){ // rząd for (int i=0; i<kol.size(); i++){ if (ilr[q.front().s][kol[i]]!=0){ act=ilr[q.front().s][kol[i]]; break; } } for (int i=0; i<m; i++){ //wywalanie z kolumn ilk[i][act]--; if (ilk[i][act]==0){ ik[i]--; if (ik[i]==1){ for (int j=0; j<kol.size(); j++){ if (ilk[i]!=0){ q.push({1,i}); break; } ik[i]=0; } } } } a=act+65; cout<<"R "<<q.front().s+1<<" "<<a<<endl; s.push({'R', {q.front().s+1, a}}); q.pop(); } if (q.front().f==1){ // kolumny for (int i=0; i<kol.size(); i++){ if (ilk[q.front().s][kol[i]]!=0){ act=ilk[q.front().s][kol[i]]; break; } } for (int i=0; i<n; i++){ //wywalanie z rzędów ilr[i][act]--; if (ilr[i][act]==0){ ir[i]--; if (ir[i]==1){ for (int j=0; j<kol.size(); j++){ if (ilr[i]!=0){ q.push({1,i}); break; } ir[i]=0; } } } } a=act+65; cout<<"K "<<q.front().s+1<<" "<<a<<endl; s.push({'K', {q.front().s+1, a}}); q.pop(); } } while (!s.empty()){ cout<<s.top().f<<" "<<s.top().s.f<<" "<<s.top().s.s<<endl; } return 0; }
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 | #include <bits/stdc++.h> #define pb push_back #define s second #define f first using namespace std; int n,m, tab[2009][2009], roz, ilr[2009][29],ilk[2009][29],k,r,act; int ir[29], ik[29]; vector <int> kol; bool zero, vis[29]; char a; stack <pair<char,pair<int,char>>> s; queue <pair<int,int>> q; int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin>>n>>m; for (int i=0; i<n; i++){ for (int j=0; j<m; j++){ cin>>a; tab[i][j]=a-65; if (!vis[tab[i][j]]){ kol.pb(tab[i][j]); vis[tab[i][j]]=1; } ilr[i][tab[i][j]]++; } } for (int j=0; j<m; j++){ for (int i=0; i<n; i++){ ilk[j][tab[i][j]]++; } } for (int j=0; j<m; j++){ for (int i=0; i<kol.size(); i++){ if (ilk[j][kol[j]]!=0) ik[j]++; } } for (int j=0; j<n; j++){ for (int i=0; i<kol.size(); i++){ if (ilr[j][kol[j]]!=0) ir[j]++; } } for (int i=0; i<n; i++){ //rzędy if (ir[i]==1){ q.push({0,i}); } } for (int i=0; i<m; i++){ //kolumny if (ik[i]==1){ q.push({1,i}); } } //cout<<q.front().f<<" "<<q.front().s<<endl; while (true) { if (q.front().f==0){ // rząd for (int i=0; i<kol.size(); i++){ if (ilr[q.front().s][kol[i]]!=0){ act=ilr[q.front().s][kol[i]]; break; } } for (int i=0; i<m; i++){ //wywalanie z kolumn ilk[i][act]--; if (ilk[i][act]==0){ ik[i]--; if (ik[i]==1){ for (int j=0; j<kol.size(); j++){ if (ilk[i]!=0){ q.push({1,i}); break; } ik[i]=0; } } } } a=act+65; cout<<"R "<<q.front().s+1<<" "<<a<<endl; s.push({'R', {q.front().s+1, a}}); q.pop(); } if (q.front().f==1){ // kolumny for (int i=0; i<kol.size(); i++){ if (ilk[q.front().s][kol[i]]!=0){ act=ilk[q.front().s][kol[i]]; break; } } for (int i=0; i<n; i++){ //wywalanie z rzędów ilr[i][act]--; if (ilr[i][act]==0){ ir[i]--; if (ir[i]==1){ for (int j=0; j<kol.size(); j++){ if (ilr[i]!=0){ q.push({1,i}); break; } ir[i]=0; } } } } a=act+65; cout<<"K "<<q.front().s+1<<" "<<a<<endl; s.push({'K', {q.front().s+1, a}}); q.pop(); } } while (!s.empty()){ cout<<s.top().f<<" "<<s.top().s.f<<" "<<s.top().s.s<<endl; } return 0; } |