#ifdef _MSC_VER #ifndef __GNUC__ #pragma warning(disable: 4996) #endif #define main main0 #endif #include <iostream> #include <string> #include <vector> using namespace std; typedef long long ll; typedef unsigned long long ull; typedef unsigned int uint; struct Ruch { Ruch() {} Ruch(char ki, int n, char ko): kierunek(ki), numer(n), kolor(ko) {} char kierunek; int numer; char kolor; void wypisz() { cout << kierunek << ' ' << numer << ' ' << kolor << '\n'; } }; vector<Ruch> ruchy; string plansza; int sprawdz_linie(char kierunek, int n, int m) { int liczba = 0; int rozmiar = n * m; int i_plus = kierunek == 'R'? m: 1; int j_plus = kierunek == 'R'? 1: m; int i_max = kierunek == 'R'? rozmiar: m; int j_max = kierunek == 'R'? m: rozmiar; for(int i = 0; i < i_max; i += i_plus) { bool linia = true; char znak = ' '; int j = i; int j_max1 = i + j_max; for(; j < j_max1; j += j_plus) { if(plansza[j] == ' ') continue; if(znak == ' ') znak = plansza[j]; else { if(znak == plansza[j]) continue; linia = false; j = rozmiar; } } if(linia && znak != ' ') { if(kierunek == 'R') ruchy.push_back(Ruch('R', i / m + 1, znak)); else ruchy.push_back(Ruch('K', i + 1, znak)); for(j = i; j < j_max1; j += j_plus) { if(plansza[j] != ' ') { plansza[j] = ' '; ++liczba; } } } } return liczba; } int main() { std::ios_base::sync_with_stdio(false); std::cin.tie(NULL); int n, m; cin >> n >> m; int liczba = n * m; for(int i = 0; i < n; ++i) { string linia; cin >> linia; plansza.append(linia); } while(liczba > 0) { liczba -= sprawdz_linie('R', n, m); liczba -= sprawdz_linie('K', n, m); } cout << ruchy.size() << '\n'; for(int i = ruchy.size() - 1; i >= 0; --i) ruchy[i].wypisz(); 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 | #ifdef _MSC_VER #ifndef __GNUC__ #pragma warning(disable: 4996) #endif #define main main0 #endif #include <iostream> #include <string> #include <vector> using namespace std; typedef long long ll; typedef unsigned long long ull; typedef unsigned int uint; struct Ruch { Ruch() {} Ruch(char ki, int n, char ko): kierunek(ki), numer(n), kolor(ko) {} char kierunek; int numer; char kolor; void wypisz() { cout << kierunek << ' ' << numer << ' ' << kolor << '\n'; } }; vector<Ruch> ruchy; string plansza; int sprawdz_linie(char kierunek, int n, int m) { int liczba = 0; int rozmiar = n * m; int i_plus = kierunek == 'R'? m: 1; int j_plus = kierunek == 'R'? 1: m; int i_max = kierunek == 'R'? rozmiar: m; int j_max = kierunek == 'R'? m: rozmiar; for(int i = 0; i < i_max; i += i_plus) { bool linia = true; char znak = ' '; int j = i; int j_max1 = i + j_max; for(; j < j_max1; j += j_plus) { if(plansza[j] == ' ') continue; if(znak == ' ') znak = plansza[j]; else { if(znak == plansza[j]) continue; linia = false; j = rozmiar; } } if(linia && znak != ' ') { if(kierunek == 'R') ruchy.push_back(Ruch('R', i / m + 1, znak)); else ruchy.push_back(Ruch('K', i + 1, znak)); for(j = i; j < j_max1; j += j_plus) { if(plansza[j] != ' ') { plansza[j] = ' '; ++liczba; } } } } return liczba; } int main() { std::ios_base::sync_with_stdio(false); std::cin.tie(NULL); int n, m; cin >> n >> m; int liczba = n * m; for(int i = 0; i < n; ++i) { string linia; cin >> linia; plansza.append(linia); } while(liczba > 0) { liczba -= sprawdz_linie('R', n, m); liczba -= sprawdz_linie('K', n, m); } cout << ruchy.size() << '\n'; for(int i = ruchy.size() - 1; i >= 0; --i) ruchy[i].wypisz(); return 0; } |