#include <bits/stdc++.h> using namespace std; constexpr int M = 2005; char plansza[M][M]; int kolumny[M][40]; int wiersze[M][40]; struct odp{ char a; int b; char c; }; int main(){ cin.tie(0)->sync_with_stdio(0); int n, m; cin>>n>>m; for(int i=1; i<=n; i++) for(int j=1; j<=m; j++){ cin>>plansza[i][j]; wiersze[i][plansza[i][j]-'A']++; kolumny[j][plansza[i][j]-'A']++; } vector<odp> wyniki; int lastWynik = 0; while(true){ lastWynik = wyniki.size(); for(int i=1; i<=n; i++){ bool czy = 0; bool czyOdp = 0; int last = 0; for(int j=0; j<=25; j++){ if(wiersze[i][j]!=0 && czy==0) czy = 1, last = j; else if(wiersze[i][j]!=0){ czyOdp = 1; break; } } if(czyOdp==0 && czy==1){ wyniki.push_back({'R', i, char(last+'A')}); wiersze[i][last] = 0; for(int j=1; j<=m; j++) kolumny[j][last] = max(kolumny[j][last]-1, 0); } } for(int i=1; i<=m; i++){ bool czy = 0; bool czyOdp = 0; int last = 0; for(int j=0; j<=25; j++){ if(kolumny[i][j]!=0 && czy==0) czy = 1, last = j; else if(kolumny[i][j]!=0){ czyOdp = 1; break; } } if(czyOdp==0 && czy==1){ wyniki.push_back({'K', i, char(last+'A')}); kolumny[i][last] = 0; for(int j=1; j<=n; j++) wiersze[j][last] = max(wiersze[j][last]-1, 0); } } if(lastWynik==wyniki.size()) break; } cout<<wyniki.size()<<endl; reverse(wyniki.begin(), wyniki.end()); for(auto i:wyniki) cout<<i.a<<" "<<i.b<<" "<<i.c<<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 | #include <bits/stdc++.h> using namespace std; constexpr int M = 2005; char plansza[M][M]; int kolumny[M][40]; int wiersze[M][40]; struct odp{ char a; int b; char c; }; int main(){ cin.tie(0)->sync_with_stdio(0); int n, m; cin>>n>>m; for(int i=1; i<=n; i++) for(int j=1; j<=m; j++){ cin>>plansza[i][j]; wiersze[i][plansza[i][j]-'A']++; kolumny[j][plansza[i][j]-'A']++; } vector<odp> wyniki; int lastWynik = 0; while(true){ lastWynik = wyniki.size(); for(int i=1; i<=n; i++){ bool czy = 0; bool czyOdp = 0; int last = 0; for(int j=0; j<=25; j++){ if(wiersze[i][j]!=0 && czy==0) czy = 1, last = j; else if(wiersze[i][j]!=0){ czyOdp = 1; break; } } if(czyOdp==0 && czy==1){ wyniki.push_back({'R', i, char(last+'A')}); wiersze[i][last] = 0; for(int j=1; j<=m; j++) kolumny[j][last] = max(kolumny[j][last]-1, 0); } } for(int i=1; i<=m; i++){ bool czy = 0; bool czyOdp = 0; int last = 0; for(int j=0; j<=25; j++){ if(kolumny[i][j]!=0 && czy==0) czy = 1, last = j; else if(kolumny[i][j]!=0){ czyOdp = 1; break; } } if(czyOdp==0 && czy==1){ wyniki.push_back({'K', i, char(last+'A')}); kolumny[i][last] = 0; for(int j=1; j<=n; j++) wiersze[j][last] = max(wiersze[j][last]-1, 0); } } if(lastWynik==wyniki.size()) break; } cout<<wyniki.size()<<endl; reverse(wyniki.begin(), wyniki.end()); for(auto i:wyniki) cout<<i.a<<" "<<i.b<<" "<<i.c<<endl; return 0; } |