#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; } |
English