結果
| 問題 |
No.13 囲みたい!
|
| コンテスト | |
| ユーザー |
xuzijian629
|
| 提出日時 | 2018-10-30 16:19:26 |
| 言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 734 ms / 5,000 ms |
| コード長 | 1,480 bytes |
| コンパイル時間 | 1,756 ms |
| コンパイル使用メモリ | 201,776 KB |
| 最終ジャッジ日時 | 2025-01-06 15:08:53 |
|
ジャッジサーバーID (参考情報) |
judge5 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 16 |
ソースコード
#include <bits/stdc++.h>
using namespace std;
using i64 = int64_t;
using vi = vector<i64>;
using vvi = vector<vi>;
int main() {
int w, h;
cin >> w >> h;
vvi b(h, vi(w));
for (int i = 0; i < h; i++) {
for (int j = 0; j < w; j++) {
cin >> b[i][j];
}
}
auto id = [&](int i, int j) {
return i * w + j;
};
auto valid = [&](int i, int j) {
return 0 <= i && i < h && 0 <= j && j < w;
};
using ii = pair<int, int>;
auto decode = [&](int i) {
return ii(i / w, i % w);
};
int ok = 0;
vvi visited(h, vi(w, 0));
int dx[] = {-1, 1, 0, 0};
int dy[] = {0, 0, -1, 1};
function<void(int, int)> dfs = [&](int v, int p) {
int x = decode(v).first;
int y = decode(v).second;
if (visited[x][y]) {
ok = 1;
return;
}
visited[x][y] = 1;
for (int k = 0; k < 4; k++) {
int xx = x + dx[k];
int yy = y + dy[k];
if (valid(xx, yy) && id(xx, yy) != p && b[xx][yy] == b[x][y]) {
dfs(id(xx, yy), v);
}
}
};
for (int i = 0; i < h; i++) {
for (int j = 0; j < w; j++) {
ok = 0;
visited = vvi(h, vi(w));
dfs(id(i, j), -1);
if (ok) {
cout << "possible" << endl;
return 0;
}
}
}
cout << "impossible" << endl;
}
xuzijian629