#include <iostream>
#include <vector>
#include <algorithm>
#include <cassert>
using ll = long long;
#define debug(x) #x << " = " << x << '\n'
const int NMAX = 3000;
char a[NMAX][NMAX];
int vertical[NMAX][NMAX], horizontal[NMAX][NMAX];
std::vector<int> g[NMAX * NMAX];
bool vis[NMAX * NMAX];
int l[NMAX * NMAX], r[NMAX * NMAX];
bool cupleaza(int u) {
vis[u] = true;
for (const auto &v : g[u]) {
if (r[v] == -1) {
r[v] = u;
l[u] = v;
return true;
}
}
for (const auto &v : g[u]) {
if (!vis[r[v]] && cupleaza(r[v])) {
l[u] = v;
r[v] = u;
return true;
}
}
return false;
}
int main() {
#ifdef LOCAL
freopen("input.txt", "r", stdin);
#endif
std::ios_base::sync_with_stdio(false);
std::cin.tie(0);
int n, m;
std::cin >> n >> m;
for (int i = 0; i < n; i++) {
std::string s;
std::cin >> s;
for (int j = 0; j < m; j++) {
a[i][j] = s[j];
}
}
int answer = 0;
int cntL = 0, cntR = 0;
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
vertical[i][j] = horizontal[i][j] = -1;
}
}
for (int i = 0; i < n; i++) {
for (int j = 0; j + 2 < m; j++) {
if (a[i][j] == 'R' && a[i][j + 1] == 'G' && a[i][j + 2] == 'W') {
cntL++;
horizontal[i][j] = horizontal[i][j + 1] = horizontal[i][j + 2] = i * m + j;
}
}
}
for (int i = 0; i + 2 < n; i++) {
for (int j = 0; j < m; j++) {
if (a[i][j] == 'R' && a[i + 1][j] == 'G' && a[i + 2][j] == 'W') {
cntR++;
vertical[i][j] = vertical[i + 1][j] = vertical[i + 2][j] = i * m + j;
}
}
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
if (vertical[i][j] != -1 && horizontal[i][j] != -1) {
g[vertical[i][j]].push_back(horizontal[i][j]);
}
}
}
bool repeat = true;
for (int i = 0; i < cntL; i++) {
l[i] = -1;
}
for (int i = 0; i < cntR; i++) {
r[i] = -1;
}
while (repeat) {
repeat = false;
for (int i = 0; i < cntL; i++) {
vis[i] = false;
}
for (int i = 0; i < cntL; i++) {
if (l[i] == -1 && cupleaza(i)) {
answer++;
repeat = true;
}
}
}
answer = cntL + cntR - answer;
std::cout << answer;
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |