#include<bits/stdc++.h> using namespace std; int sum[2000*2+21][26+21]; int n, m; vector< pair<int,int> >Answer; void divide(int side, int color) { sum[side][27] = 0; if (side < 2000) { for(int i = 0; i < m; ++i) if(sum[i+2000][27] != 0) { --sum[i+2000][color]; --sum[i+2000][27]; } } else for(int i = 0; i < n; ++i) if(sum[i][27] != 0) { --sum[i][color]; --sum[i][27]; } // cout << side + 1<< " "<<color<<"\n"; // cout << sum[0][27] << " " << sum[0][0]<<"ASDA\n"; for(int i = 0; i < m; ++i) for(int color = 0; color < 27; ++color) if (sum[i+2000][27]!=0 && sum[i+2000][color] == sum[i+2000][27]) divide(i+2000, color); for(int i = 0; i < n; ++i) for(int color = 0; color < 27; ++color) if (sum[i][27]!=0 && sum[i][color] == sum[i][27]) divide(i, color); Answer.push_back({side, color}); } int main() { cin >> n >> m; char x; pair <int, int> start; for (int i = 0; i < n; ++i) for (int j = 0; j < m; ++j) { cin >> x; x = (int)x - (int)'A'; ++sum[i][x]; ++sum[j+2000][x]; if(sum[i][x] == m) start={i, x}; if(sum[j+2000][x] == n) start={j+2000, x}; sum[i][27] = m; sum[j+2000][27] = n; } divide(start.first, start.second); cout << Answer.size() << "\n"; for(auto it: Answer) { if(it.first < 2000) cout << "R " << it.first + 1 << " " << (char)(it.second + 'A') << "\n"; else cout << "K " << it.first + 1 - 2000 << " " << (char)(it.second + 'A') << "\n"; } }
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 | #include<bits/stdc++.h> using namespace std; int sum[2000*2+21][26+21]; int n, m; vector< pair<int,int> >Answer; void divide(int side, int color) { sum[side][27] = 0; if (side < 2000) { for(int i = 0; i < m; ++i) if(sum[i+2000][27] != 0) { --sum[i+2000][color]; --sum[i+2000][27]; } } else for(int i = 0; i < n; ++i) if(sum[i][27] != 0) { --sum[i][color]; --sum[i][27]; } // cout << side + 1<< " "<<color<<"\n"; // cout << sum[0][27] << " " << sum[0][0]<<"ASDA\n"; for(int i = 0; i < m; ++i) for(int color = 0; color < 27; ++color) if (sum[i+2000][27]!=0 && sum[i+2000][color] == sum[i+2000][27]) divide(i+2000, color); for(int i = 0; i < n; ++i) for(int color = 0; color < 27; ++color) if (sum[i][27]!=0 && sum[i][color] == sum[i][27]) divide(i, color); Answer.push_back({side, color}); } int main() { cin >> n >> m; char x; pair <int, int> start; for (int i = 0; i < n; ++i) for (int j = 0; j < m; ++j) { cin >> x; x = (int)x - (int)'A'; ++sum[i][x]; ++sum[j+2000][x]; if(sum[i][x] == m) start={i, x}; if(sum[j+2000][x] == n) start={j+2000, x}; sum[i][27] = m; sum[j+2000][27] = n; } divide(start.first, start.second); cout << Answer.size() << "\n"; for(auto it: Answer) { if(it.first < 2000) cout << "R " << it.first + 1 << " " << (char)(it.second + 'A') << "\n"; else cout << "K " << it.first + 1 - 2000 << " " << (char)(it.second + 'A') << "\n"; } } |