#include <bits/stdc++.h> using namespace std; map <char, int> R[10000]; map <char, int> K[10000]; string s[10000]; vector <pair<pair<char, int>, char> > result; int main(){ std::ios_base::sync_with_stdio(false); std::cout.tie(nullptr); std::cin.tie(nullptr); int n, m; bool spr; cin >> n >> m; for(int i = 0; i < n; ++i){ cin >> s[i]; for(int j = 0; j < m; ++j){ R[i][s[i][j]]++; K[j][s[i][j]]++; } } spr = true; while(spr){ // cout<<"R:\n"; // for(int i=0;i<n;++i){ // cout<<i<<": "; // for(auto j = R[i].begin(); j != R[i].end(); ++j){ // cout << j->first << ' ' << j->second << " | "; // } // cout << '\n'; // } // cout<<"K:\n"; // for(int i=0;i<m;++i){ // cout<<i<<": "; // for(auto j = K[i].begin(); j != K[i].end(); ++j){ // cout << j->first << ' ' << j->second << " | "; // } // cout << '\n'; // } // cout<<'\n'; // if(rand()%100 == 0){ // return 0; // } for(int i = 0; i < n; ++i){ if(R[i].size() == 1){ result.push_back({{'R', i + 1}, R[i].begin()->first}); for(int j = 0; j < m; ++j){ if(K[j].count(R[i].begin()->first) == 1){ K[j][R[i].begin()->first]--; if(K[j][R[i].begin()->first] == 0){ K[j].erase(R[i].begin()->first); } } } R[i].clear(); } } for(int i = 0; i < m; ++i){ if(K[i].size() == 1){ result.push_back({{'K', i + 1}, K[i].begin()->first}); for(int j = 0; j < n; ++j){ if(R[j].count(K[i].begin()->first) == 1){ R[j][K[i].begin()->first]--; if(R[j][K[i].begin()->first] == 0){ R[j].erase(K[i].begin()->first); } } } K[i].clear(); } } spr = false; for(int i = 0; i < n; ++i){ if(!R[i].empty()){ spr = true; break; } } for(int i = 0; i < m; ++i){ if(!K[i].empty()){ spr = true; break; } } } cout << result.size() << '\n'; for(int i = result.size() - 1; i >=0; --i){ cout << result[i].first.first << ' ' << result[i].first.second << ' ' << result[i].second << '\n'; } 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 98 99 100 101 102 103 104 105 106 107 108 | #include <bits/stdc++.h> using namespace std; map <char, int> R[10000]; map <char, int> K[10000]; string s[10000]; vector <pair<pair<char, int>, char> > result; int main(){ std::ios_base::sync_with_stdio(false); std::cout.tie(nullptr); std::cin.tie(nullptr); int n, m; bool spr; cin >> n >> m; for(int i = 0; i < n; ++i){ cin >> s[i]; for(int j = 0; j < m; ++j){ R[i][s[i][j]]++; K[j][s[i][j]]++; } } spr = true; while(spr){ // cout<<"R:\n"; // for(int i=0;i<n;++i){ // cout<<i<<": "; // for(auto j = R[i].begin(); j != R[i].end(); ++j){ // cout << j->first << ' ' << j->second << " | "; // } // cout << '\n'; // } // cout<<"K:\n"; // for(int i=0;i<m;++i){ // cout<<i<<": "; // for(auto j = K[i].begin(); j != K[i].end(); ++j){ // cout << j->first << ' ' << j->second << " | "; // } // cout << '\n'; // } // cout<<'\n'; // if(rand()%100 == 0){ // return 0; // } for(int i = 0; i < n; ++i){ if(R[i].size() == 1){ result.push_back({{'R', i + 1}, R[i].begin()->first}); for(int j = 0; j < m; ++j){ if(K[j].count(R[i].begin()->first) == 1){ K[j][R[i].begin()->first]--; if(K[j][R[i].begin()->first] == 0){ K[j].erase(R[i].begin()->first); } } } R[i].clear(); } } for(int i = 0; i < m; ++i){ if(K[i].size() == 1){ result.push_back({{'K', i + 1}, K[i].begin()->first}); for(int j = 0; j < n; ++j){ if(R[j].count(K[i].begin()->first) == 1){ R[j][K[i].begin()->first]--; if(R[j][K[i].begin()->first] == 0){ R[j].erase(K[i].begin()->first); } } } K[i].clear(); } } spr = false; for(int i = 0; i < n; ++i){ if(!R[i].empty()){ spr = true; break; } } for(int i = 0; i < m; ++i){ if(!K[i].empty()){ spr = true; break; } } } cout << result.size() << '\n'; for(int i = result.size() - 1; i >=0; --i){ cout << result[i].first.first << ' ' << result[i].first.second << ' ' << result[i].second << '\n'; } return 0; } |