Submission #377459

#TimeUsernameProblemLanguageResultExecution timeMemory
377459AraragiSelotejp (COCI20_selotejp)C++17
0 / 110
900 ms1996 KiB
#include <bits/stdc++.h> #define F first #define S second using namespace std; int hr[2][2] = {{1, 0}, {-1, 0}}; int vr[2][2] = {{0, 1}, {0, -1}}; int n, m; map<int, map<int, bool> > hor, ver, vis; bool valid(int x, int y) {return (min(x, y) >= 1 && x <= n && y <= m && !vis[x][y]);} bool validHor(int x, int y) {return (min(x, y) >= 1 && x <= n && y <= m && !hor[x][y]);} bool validVer(int x, int y) {return (min(x, y) >= 1 && x <= n && y <= m && !ver[x][y]);} queue<pair<int, int> > q; int cnt, x, y; int main() { ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin >> n >> m; for (int i = 1; i <= n; i++) for (int j = 1; j <= m; j++) { char c; cin >> c; if (c == '.') vis[i][j] = true; } for (int i = 1; i <= n; i++) for (int j = 1; j <= m; j++) if (!vis[i][j]) { q.push({i, j}); vis[i][j] = true; int skok_hor = 0, skok_ver = 0; hor = vis; ver = vis; while (!q.empty()) { skok_hor++; x = q.front().F; y = q.front().S; q.pop(); for (int i = 0; i < 2; i++) { int cx = x + hr[i][0]; int cy = y + hr[i][1]; if (validHor(cx, cy)) { q.push({cx, cy}); hor[cx][cy] = true; } } } while (!q.empty()) q.pop(); q.push({i, j}); ver[i][j] = true; while (!q.empty()) { x = q.front().F; y = q.front().S; q.pop(); skok_ver++; for (int i = 0; i < 2; i++) { int cx = x + vr[i][0]; int cy = y + vr[i][1]; if (validVer(cx, cy)) { q.push({cx, cy}); ver[cx][cy] = true; } } } if (skok_ver == skok_hor && skok_hor == 1) { cnt++; } else if (skok_ver > skok_hor) { vis = ver; cnt++; } else { vis = hor; cnt++; } } cout << cnt; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...