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