Submission #69669891
Source Code Expand
#include <bits/stdc++.h> #include <atcoder/all> using namespace std; using namespace atcoder; using ll = long long; int main() { ios::sync_with_stdio(false); cin.tie(0); int H, W; cin >> H >> W; vector<string> S(H); for(int i=0; i<H; i++) cin >> S[i]; const int N = H*W; auto id = [&](int i, int j){ return i * W + j; }; auto inside = [&](int i, int j){ return 0<= i&& i<H && 0<=j && j<W; }; const int di[4] = {-1, 1, 0, 0}; const int dj[4] = { 0, 0,-1, 1}; vector<char> black(N, 0); vector<int> deg(N, 0); ll ans = 0; /// 初期黒を集める vector<int> initBlack; for (int i=0; i<H; i++) { for (int j=0; j<W; j++) { if (S[i][j] == '#') { int v = id(i, j); black[v] = 1; ans++; initBlack.push_back(v); } } } // 初期黒から隣接白の黒隣接数を数える for (int v : initBlack) { int i = v/W, j = v%W; for (int d=0; d<4; d++) { int ni = i+di[d], nj = j+dj[d]; if (!inside(ni, nj)) continue; int u = id(ni, nj); if (!black[u]) deg[u]++; } } // 黒化する集合 vector<int> cur; for (int v=0; v<N; v++) { if (!black[v] && deg[v] == 1) { black[v] = 1; ans++; cur.push_back(v); } } vector<int> touched; vector<char> mark(N, 0); // 黒になる候補がなくなったら終了 while (!cur.empty()) { // 今、黒になった頂点から、白隣接の deg をまとめて更新 touched.clear(); for (int v : cur) { int i = v/W, j = v%W; for (int d=0; d<4; d++) { int ni = i+di[d], nj = j+dj[d]; if (!inside(ni, nj)) continue; int u = id(ni, nj); if (!black[u]) { deg[u]++; if (!mark[u]) { mark[u] = 1; touched.push_back(u); } } } } // 次で黒化する集合をまとめて決定 vector<int> next; next.reserve(touched.size()); for (int u : touched) { if (!black[u] && deg[u] == 1) { black[u] = 1; ans++; next.push_back(u); } mark[u] = 0; // フラグを戻す } cur.swap(next); } cout << ans << '\n'; return 0; }
Submission Info
Submission Time | |
---|---|
Task | D - Ulam-Warburton Automaton |
User | tkar821 |
Language | C++ 23 (gcc 12.2) |
Score | 425 |
Code Size | 2295 Byte |
Status | AC |
Exec Time | 11 ms |
Memory | 8156 KiB |
Judge Result
Set Name | Sample | All | ||||
---|---|---|---|---|---|---|
Score / Max Score | 0 / 0 | 425 / 425 | ||||
Status |
|
|
Set Name | Test Cases |
---|---|
Sample | 00_sample_00.txt, 00_sample_01.txt, 00_sample_02.txt |
All | 00_sample_00.txt, 00_sample_01.txt, 00_sample_02.txt, 01_test_00.txt, 01_test_01.txt, 01_test_02.txt, 01_test_03.txt, 01_test_04.txt, 01_test_05.txt, 01_test_06.txt, 01_test_07.txt, 01_test_08.txt, 01_test_09.txt, 01_test_10.txt, 01_test_11.txt, 01_test_12.txt, 01_test_13.txt, 01_test_14.txt, 01_test_15.txt, 01_test_16.txt, 01_test_17.txt, 01_test_18.txt, 01_test_19.txt, 01_test_20.txt, 01_test_21.txt, 01_test_22.txt, 01_test_23.txt, 01_test_24.txt, 01_test_25.txt, 01_test_26.txt, 01_test_27.txt, 01_test_28.txt, 01_test_29.txt, 01_test_30.txt, 01_test_31.txt, 01_test_32.txt, 01_test_33.txt, 01_test_34.txt, 01_test_35.txt, 01_test_36.txt |
Case Name | Status | Exec Time | Memory |
---|---|---|---|
00_sample_00.txt | AC | 1 ms | 3556 KiB |
00_sample_01.txt | AC | 1 ms | 3552 KiB |
00_sample_02.txt | AC | 1 ms | 3564 KiB |
01_test_00.txt | AC | 9 ms | 6136 KiB |
01_test_01.txt | AC | 4 ms | 4316 KiB |
01_test_02.txt | AC | 5 ms | 4600 KiB |
01_test_03.txt | AC | 8 ms | 5560 KiB |
01_test_04.txt | AC | 9 ms | 6248 KiB |
01_test_05.txt | AC | 10 ms | 6304 KiB |
01_test_06.txt | AC | 11 ms | 6560 KiB |
01_test_07.txt | AC | 10 ms | 6256 KiB |
01_test_08.txt | AC | 11 ms | 6576 KiB |
01_test_09.txt | AC | 11 ms | 6848 KiB |
01_test_10.txt | AC | 5 ms | 5416 KiB |
01_test_11.txt | AC | 6 ms | 5416 KiB |
01_test_12.txt | AC | 6 ms | 5488 KiB |
01_test_13.txt | AC | 6 ms | 5468 KiB |
01_test_14.txt | AC | 6 ms | 5700 KiB |
01_test_15.txt | AC | 7 ms | 5516 KiB |
01_test_16.txt | AC | 7 ms | 5872 KiB |
01_test_17.txt | AC | 8 ms | 5832 KiB |
01_test_18.txt | AC | 9 ms | 6240 KiB |
01_test_19.txt | AC | 10 ms | 6208 KiB |
01_test_20.txt | AC | 6 ms | 5268 KiB |
01_test_21.txt | AC | 5 ms | 5328 KiB |
01_test_22.txt | AC | 5 ms | 5244 KiB |
01_test_23.txt | AC | 5 ms | 5224 KiB |
01_test_24.txt | AC | 5 ms | 5268 KiB |
01_test_25.txt | AC | 6 ms | 5480 KiB |
01_test_26.txt | AC | 6 ms | 5460 KiB |
01_test_27.txt | AC | 7 ms | 5852 KiB |
01_test_28.txt | AC | 7 ms | 6084 KiB |
01_test_29.txt | AC | 9 ms | 8156 KiB |
01_test_30.txt | AC | 7 ms | 6524 KiB |
01_test_31.txt | AC | 7 ms | 6420 KiB |
01_test_32.txt | AC | 8 ms | 6800 KiB |
01_test_33.txt | AC | 7 ms | 6640 KiB |
01_test_34.txt | AC | 7 ms | 6444 KiB |
01_test_35.txt | AC | 8 ms | 6680 KiB |
01_test_36.txt | AC | 7 ms | 5168 KiB |