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