#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; } |
English