제출 #1192910

#제출 시각아이디문제언어결과실행 시간메모리
1192910LucaLucaMDango Maker (JOI18_dango_maker)C++20
0 / 100
100 ms211784 KiB
#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') { cntR++; horizontal[i][j] = horizontal[i + 1][j] = horizontal[i + 2][j] = 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') { cntL++; vertical[i][j] = vertical[i][j + 1] = vertical[i][j + 2] = 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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...