結果
問題 | No.2412 YOU Grow Bigger! |
ユーザー |
👑 ![]() |
提出日時 | 2023-08-11 22:42:11 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 10 ms / 6,000 ms |
コード長 | 1,595 bytes |
コンパイル時間 | 1,171 ms |
コンパイル使用メモリ | 87,696 KB |
最終ジャッジ日時 | 2025-02-16 01:50:51 |
ジャッジサーバーID (参考情報) |
judge4 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 2 |
other | AC * 29 |
ソースコード
#include <iostream>#include <string>#include <vector>#include <algorithm>#include <atcoder/modint>#include <atcoder/dsu>using namespace std;using i32 = int;using u32 = unsigned int;using i64 = long long;using u64 = unsigned long long;#define rep(i,n) for(int i=0; i<(int)(n); i++)const i64 INF = 1001001001001001001;using Modint = atcoder::static_modint<998244353>;int main(){int H,W; cin >> H >> W;vector<string> G(H+2);G[0] = G[H+1] = string(W+2, '#');rep(y,H){string s; cin >> s;G[y+1] = "#" + s + "#";}H += 2; W += 2;rep(y,4) rep(x,4) G[y][x] = G[H-1-y][W-1-x] = 'V';auto dsu = atcoder::dsu(H*W);rep(y0,H) rep(x0,W) rep(y1,H) rep(x1,W) if(G[y0][x0] == '#' && G[y1][x1] == '#'){if(abs(y0-y1) + abs(x0-x1) != 6 && abs(y0-y1) <= 3 && abs(x0-x1) <= 3){dsu.merge(y0*W+x0, y1*W+x1);}}int p0 = W-1, p1 = W*(H-1);if(dsu.same(p0, p1)){ cout << "0\n"; return 0; }rep(y,H) rep(x,W) if(G[y][x] == '.'){int C = 0;for(int dy=-3; dy<=3; dy++) for(int dx=-3; dx<=3; dx++) if(abs(dy) + abs(dx) <= 5){int ny = y + dy, nx = x + dx;if(ny >= 0 && ny < H && nx >= 0 && nx < W){if(dsu.same(ny*W+nx, p0)) C |= 1;if(dsu.same(ny*W+nx, p1)) C |= 2;}}if(C == 3){ cout << "1\n"; return 0; }}cout << "2\n";return 0;}struct ios_do_not_sync{ios_do_not_sync(){ios::sync_with_stdio(false);cin.tie(nullptr);}} ios_do_not_sync_instance;