結果
| 問題 | No.3679 なんかでっかい虫リターンズ |
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2026-09-07 21:08:08 |
| 言語 | C++23(gcc16) (gcc 16.1.0 + boost 1.92.0 + ACL) |
| 結果 |
RE
不安定
|
| 実行時間 | - |
| コード長 | 2,837 bytes |
| 記録 | |
| コンパイル時間 | 2,642 ms |
| コンパイル使用メモリ | 365,228 KB |
| 実行使用メモリ | 6,272 KB |
| 最終ジャッジ日時 | 2026-09-07 21:08:24 |
| 合計ジャッジ時間 | 4,551 ms |
|
ジャッジサーバーID (参考情報) |
judge3_1 / judge1_0 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 2 RE * 1 |
| other | AC * 14 WA * 3 |
コンパイルメッセージ
main.cpp: In function 'int main()':
main.cpp:62:17: warning: 'cx' may be used uninitialized [-Wmaybe-uninitialized]
62 | dist2[cy][cx] = 0;
| ^
main.cpp:27:9: note: 'cx' was declared here
27 | int cx, cy;
| ^~
main.cpp:62:13: warning: 'cy' may be used uninitialized [-Wmaybe-uninitialized]
62 | dist2[cy][cx] = 0;
| ^
main.cpp:27:13: note: 'cy' was declared here
27 | int cx, cy;
| ^~
ソースコード
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
#define rep(i, n) for (int i = 0; i < (int)(n); i++)
int main() {
int H, W; cin >> H >> W;
int A, B; cin >> A >> B;
A--; B--;
int R1, C1, R2, C2; cin >> R1 >> C1 >> R2 >> C2;
R1--; C1--; R2--; C2--;
int P, Q; cin >> P >> Q;
P--; Q--;
int dy[4] = {1, 0, -1 ,0};
int dx[4] = {0, 1, 0, -1};
queue<pair<int, int>> q;
vector<vector<int>> dist(H, vector<int> (W, -1));
dist[A][B] = 0;
q.push({A, B});
int ans = 0;
bool fg = false;
int cx, cy;
while (!q.empty()) {
auto [y, x] = q.front();
q.pop();
for (int k = 0; k < 4; k++) {
int ny = y + dy[k];
int nx = x + dx[k];
if (ny < 0 || ny >= H) continue;
if (nx < 0 || nx >= W) continue;
if (dist[ny][nx] != -1) continue;
dist[ny][nx] = dist[y][x] + 1;
q.push({ny, nx});
if (ny >= R1 && ny <= R2 && nx >= C1 && nx <= C2) {
cy = ny;
cx = nx;
ans += dist[ny][nx];
fg = true;
break;
}
}
if (fg) break;
}
queue<pair<int, int>> q2;
vector<vector<int>> dist2(H, vector<int> (W, -1));
dist2[cy][cx] = 0;
q2.push({cy, cx});
bool fg2 = false;
while (!q2.empty()) {
auto [y, x] = q2.front();
q2.pop();
for (int k = 0; k < 4; k++) {
int ny = y + dy[k];
int nx = x + dx[k];
if (ny < 0 || ny >= H) continue;
if (nx < 0 || nx >= W) continue;
if (dist2[ny][nx] != -1) continue;
dist2[ny][nx] = dist2[y][x] + 1;
q2.push({ny, nx});
if (ny == P && nx == Q) {
cy = P;
cx = Q;
ans += dist2[ny][nx];
fg2 = true;
}
}
if (fg2) break;
}
queue<pair<int, int>> q3;
vector<vector<int>> dist3(H, vector<int> (W, -1));
dist3[cy][cx] = 0;
q3.push({cy, cx});
bool fg3 = false;
while (!q3.empty()) {
auto [y, x] = q3.front();
q3.pop();
for (int k = 0; k < 4; k++) {
int ny = y + dy[k];
int nx = x + dx[k];
if (ny < 0 || ny >= H) continue;
if (nx < 0 || nx >= W) continue;
if (dist3[ny][nx] != -1) continue;
dist3[ny][nx] = dist3[y][x] + 1;
q3.push({ny, nx});
if (ny == A && nx == B) {
cy = A;
cx = B;
ans += dist3[ny][nx];
fg3 = true;
}
}
if (fg3) break;
}
cout << ans << endl;
return 0;
}