結果
| 問題 | No.13 囲みたい! |
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2026-10-16 03:46:11 |
| 言語 | C++23(gcc16) (gcc 16.2.0 + boost 1.92.0 + ACL) |
| 結果 |
AC
不安定
|
| 実行時間 | 14 ms / 5,000 ms |
| + 600µs | |
| コード長 | 1,577 bytes |
| 記録 | |
| コンパイル時間 | 2,580 ms |
| コンパイル使用メモリ | 186,060 KB |
| 実行使用メモリ | 9,796 KB |
| 最終ジャッジ日時 | 2026-10-16 03:46:19 |
| 合計ジャッジ時間 | 5,216 ms |
|
ジャッジサーバーID (参考情報) |
judge5_0 / judge2_0 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 16 |
ソースコード
#include <algorithm>
#include <iostream>
#include <vector>
int main() {
using namespace std;
int w, h, max_val = 0;
cin >> w >> h;
vector m(h, vector<int>(w));
for (int i = 0; i < h; i++) {
for (int j = 0; j < w; j++) {
cin >> m[i][j];
max_val = max(max_val, m[i][j]);
}
}
constexpr int di[] = {-1, 0, 1, 0};
constexpr int dj[] = {0, -1, 0, 1};
auto calc_next = [&](int p) -> vector<int> {
int i = p / w, j = p % w;
vector<int> res;
for (int k = 0; k < 4; k++) {
int ni = i + di[k], nj = j + dj[k];
if (ni < 0 || ni >= h || nj < 0 || nj >= w) { continue; }
if (m[i][j] == m[ni][nj]) { res.push_back(ni * w + nj); }
}
return res;
};
for (int x = 1; x <= max_val; x++) {
vector<bool> vis(h * w, false);
for (int i = 0; i < h; i++) {
for (int j = 0; j < w; j++) {
int p = i * w + j;
if (m[i][j] != x || vis[p]) { continue; }
auto dfs = [&](auto dfs, int v, int p) -> void {
for (int nv : calc_next(v)) {
if (nv == p) { continue; }
if (vis[nv]) {
cout << "possible\n";
exit(0);
}
vis[nv] = true;
dfs(dfs, nv, v);
}
};
dfs(dfs, p, -1);
}
}
}
cout << "impossible\n";
}