#include<bits/stdc++.h>
using namespace std;
struct zzz{
char a;
int b, c;
};
const int maxn=2009;
int wiersze[maxn][30], kolumny[maxn][30];
int wiersz_ile[maxn], kolumna_ile[maxn], tab[maxn][maxn];
vector<zzz> zap;
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int n, m, a;
char c;
cin >> n >> m;
for(int i=1; i<=n; i++) {
for(int j=1; j<=m; j++) {
cin >> c;
a=c-'A';
tab[i][j]=a;
wiersze[i][a]++;
if(wiersze[i][a]==1) {
wiersz_ile[i]++;
}
kolumny[j][a]++;
if(kolumny[j][a]==1) {
kolumna_ile[j]++;
}
}
}
bool czy;
int jaki;
while(true) {
czy=0;
//ustawiamy czy jesli znajdziemy 1
for(int i=1; i<=n; i++) {
if(wiersz_ile[i]==1) {
for(int j=1; j<=m; j++) {
if(tab[i][j]!=-1) {
jaki=tab[i][j];
wiersze[i][tab[i][j]]--;
kolumny[j][tab[i][j]]--;
if(kolumny[j][tab[i][j]]==0) {
kolumna_ile[j]--;
}
tab[i][j]=-1;
}
}
zap.push_back({'R', i, jaki});
czy=1;
wiersz_ile[i]=0;
break;
}
}
if(czy) {
continue;
}
for(int j=1; j<=m; j++) {
if(kolumna_ile[j]==1) {
//cout << "JESTEM: " << j << endl;
for(int i=1; i<=n; i++) {
if(tab[i][j]!=-1) {
jaki=tab[i][j];
wiersze[i][tab[i][j]]--;
kolumny[j][tab[i][j]]--;
if(wiersze[i][tab[i][j]]==0) {
//cout << j << ' ' << i << ' ' << tab[i][j] << endl;
//cout << "WESZLO" << endl;
//return 0;
wiersz_ile[i]--;
}
tab[i][j]=-1;
}
}
kolumna_ile[j]=0;
zap.push_back({'K', j, jaki});
czy=1;
break;
}
}
if(!czy) {
break;
}
}
reverse(zap.begin(), zap.end());
cout << zap.size() << endl;
for(auto xd:zap) {
cout << xd.a << ' '<< xd.b << ' '<< (char)(xd.c+'A') << endl;
}
}
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 | #include<bits/stdc++.h> using namespace std; struct zzz{ char a; int b, c; }; const int maxn=2009; int wiersze[maxn][30], kolumny[maxn][30]; int wiersz_ile[maxn], kolumna_ile[maxn], tab[maxn][maxn]; vector<zzz> zap; int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n, m, a; char c; cin >> n >> m; for(int i=1; i<=n; i++) { for(int j=1; j<=m; j++) { cin >> c; a=c-'A'; tab[i][j]=a; wiersze[i][a]++; if(wiersze[i][a]==1) { wiersz_ile[i]++; } kolumny[j][a]++; if(kolumny[j][a]==1) { kolumna_ile[j]++; } } } bool czy; int jaki; while(true) { czy=0; //ustawiamy czy jesli znajdziemy 1 for(int i=1; i<=n; i++) { if(wiersz_ile[i]==1) { for(int j=1; j<=m; j++) { if(tab[i][j]!=-1) { jaki=tab[i][j]; wiersze[i][tab[i][j]]--; kolumny[j][tab[i][j]]--; if(kolumny[j][tab[i][j]]==0) { kolumna_ile[j]--; } tab[i][j]=-1; } } zap.push_back({'R', i, jaki}); czy=1; wiersz_ile[i]=0; break; } } if(czy) { continue; } for(int j=1; j<=m; j++) { if(kolumna_ile[j]==1) { //cout << "JESTEM: " << j << endl; for(int i=1; i<=n; i++) { if(tab[i][j]!=-1) { jaki=tab[i][j]; wiersze[i][tab[i][j]]--; kolumny[j][tab[i][j]]--; if(wiersze[i][tab[i][j]]==0) { //cout << j << ' ' << i << ' ' << tab[i][j] << endl; //cout << "WESZLO" << endl; //return 0; wiersz_ile[i]--; } tab[i][j]=-1; } } kolumna_ile[j]=0; zap.push_back({'K', j, jaki}); czy=1; break; } } if(!czy) { break; } } reverse(zap.begin(), zap.end()); cout << zap.size() << endl; for(auto xd:zap) { cout << xd.a << ' '<< xd.b << ' '<< (char)(xd.c+'A') << endl; } } |
English