#include <bits/stdc++.h> using namespace std; #define f first #define s second // #define int long long; constexpr int maxn=2000+7; int n,m; char x; int k[maxn][30]; int r[maxn][30]; stack<pair<char,pair<int,char>>> solv; int obc=1; int val; int32_t main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin>>n>>m; for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { cin>>x; k[j][x-'A']++; r[i][x-'A']++; } } while(true) { bool next=false; for(int i=1;i<=n;i++) { obc=0; for(int z=0;z<30;z++) { if(r[i][z]>0) { val=z; ++obc; } } if(obc==1) { r[i][val]=0; solv.push({'R',{i,'A'+val}}); // cout<<'R'<<" "<<i<<" "<<char('A'+val)<<endl; for(int j=1;j<=m;++j) --k[j][val]; next=true; break; } } if(!next)//dla kolumn for(int j=1;j<=m;++j) { obc=0; for(int z=0;z<30;++z) { if(k[j][z]>0) { val=z; ++obc; } } if(obc==1) { k[j][val]=0; solv.push({'K',{j,'A'+val}}); // cout<<'K'<<" "<<j<<" "<<char('A'+val)<<endl; for(int i=1;i<=n;++i) --r[i][val]; next=true; break; } } if(!next) break; } cout<<solv.size()<<'\n'; while(!solv.empty()) { cout<<solv.top().f<<' '<<solv.top().s.f<<' '<<solv.top().s.s<<'\n'; solv.pop(); } 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 | #include <bits/stdc++.h> using namespace std; #define f first #define s second // #define int long long; constexpr int maxn=2000+7; int n,m; char x; int k[maxn][30]; int r[maxn][30]; stack<pair<char,pair<int,char>>> solv; int obc=1; int val; int32_t main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin>>n>>m; for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { cin>>x; k[j][x-'A']++; r[i][x-'A']++; } } while(true) { bool next=false; for(int i=1;i<=n;i++) { obc=0; for(int z=0;z<30;z++) { if(r[i][z]>0) { val=z; ++obc; } } if(obc==1) { r[i][val]=0; solv.push({'R',{i,'A'+val}}); // cout<<'R'<<" "<<i<<" "<<char('A'+val)<<endl; for(int j=1;j<=m;++j) --k[j][val]; next=true; break; } } if(!next)//dla kolumn for(int j=1;j<=m;++j) { obc=0; for(int z=0;z<30;++z) { if(k[j][z]>0) { val=z; ++obc; } } if(obc==1) { k[j][val]=0; solv.push({'K',{j,'A'+val}}); // cout<<'K'<<" "<<j<<" "<<char('A'+val)<<endl; for(int i=1;i<=n;++i) --r[i][val]; next=true; break; } } if(!next) break; } cout<<solv.size()<<'\n'; while(!solv.empty()) { cout<<solv.top().f<<' '<<solv.top().s.f<<' '<<solv.top().s.s<<'\n'; solv.pop(); } return 0; } |