#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
bool check_horizontal(string s){
set<char> col;
for(char c : s){
col.insert(c);
}
if(col.size() == 1 && *col.begin() != '0'){
return true;
}else if(col.size() == 2 && (*col.begin() == '0' || *col.end() == '0')){
return true;
}else{
return false;
}
}
void insert_horizontal(vector<string>& v, int nr, int m){
for(int i = 0; i < m; i++){
v[nr][i] = '0';
}
}
bool check_vertical(vector<string>& v, int column, int n){
set<char> color;
for(int i = 0; i < n; i++){
color.insert(v[i][column]);
}
if(color.size() == 1 && *color.begin() != '0'){
return true;
}else if(color.size() == 2 && (*color.begin() == '0' || *color.end() == '0')){
return true;
}else{
return false;
}
}
void insert_vertical(vector<string>& v, int nr, int n){
for(int i = 0; i < n; i++){
v[i][nr] = '0';
}
}
int main(){
cin.tie(nullptr)->ios::sync_with_stdio(0);
int n, m; // n - liczba wierszy m - liczba kolumn
cin >> n >> m;
vector<string> v(n);
for(auto& e : v){
cin >> e;
}
vector<pair<char, pair<int, char>>> odp;
bool found = true;
while(found){
found = false;
for(int i = 0; i < n; i++){
if(check_horizontal(v[i])){
found = true;
char c;
for(char k : v[i]){
if(k != '0'){
c = k;
break;
}
}
odp.push_back({'R', {i + 1, c}});
insert_horizontal(v, i, m);
}
}
for(int i = 0; i < m; i++){
if(check_vertical(v, i, n)){
found = true;
char c;
for(int j = 0; j < n; j++){
if(v[j][i] != '0'){
c = v[j][i];
break;
}
}
odp.push_back({'K', {i + 1, c}});
insert_vertical(v, i, n);
}
}
}
cout << odp.size() << "\n";
for(int i = odp.size() - 1; i >= 0; i--){
cout << odp[i].first << ' ' << odp[i].second.first << ' ' << odp[i].second.second << "\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 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 109 110 111 112 113 114 | #include<bits/stdc++.h> using namespace std; typedef long long LL; bool check_horizontal(string s){ set<char> col; for(char c : s){ col.insert(c); } if(col.size() == 1 && *col.begin() != '0'){ return true; }else if(col.size() == 2 && (*col.begin() == '0' || *col.end() == '0')){ return true; }else{ return false; } } void insert_horizontal(vector<string>& v, int nr, int m){ for(int i = 0; i < m; i++){ v[nr][i] = '0'; } } bool check_vertical(vector<string>& v, int column, int n){ set<char> color; for(int i = 0; i < n; i++){ color.insert(v[i][column]); } if(color.size() == 1 && *color.begin() != '0'){ return true; }else if(color.size() == 2 && (*color.begin() == '0' || *color.end() == '0')){ return true; }else{ return false; } } void insert_vertical(vector<string>& v, int nr, int n){ for(int i = 0; i < n; i++){ v[i][nr] = '0'; } } int main(){ cin.tie(nullptr)->ios::sync_with_stdio(0); int n, m; // n - liczba wierszy m - liczba kolumn cin >> n >> m; vector<string> v(n); for(auto& e : v){ cin >> e; } vector<pair<char, pair<int, char>>> odp; bool found = true; while(found){ found = false; for(int i = 0; i < n; i++){ if(check_horizontal(v[i])){ found = true; char c; for(char k : v[i]){ if(k != '0'){ c = k; break; } } odp.push_back({'R', {i + 1, c}}); insert_horizontal(v, i, m); } } for(int i = 0; i < m; i++){ if(check_vertical(v, i, n)){ found = true; char c; for(int j = 0; j < n; j++){ if(v[j][i] != '0'){ c = v[j][i]; break; } } odp.push_back({'K', {i + 1, c}}); insert_vertical(v, i, n); } } } cout << odp.size() << "\n"; for(int i = odp.size() - 1; i >= 0; i--){ cout << odp[i].first << ' ' << odp[i].second.first << ' ' << odp[i].second.second << "\n"; } } |
English