提出 #53423380
ソースコード 拡げる
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
int n;
vector<vector<char>> c;
bool bfs(int mid, pair<int, int> start, pair<int, int> goal, char color) {
vector<vector<bool>> seen(n, vector<bool>(n, false));
seen[0][0] = true;
int gi = goal.first, gj = goal.second;
priority_queue<pair<int, pair<int, int>>, vector<pair<int, pair<int, int>>>, greater<pair<int, pair<int, int>>>> q;
q.push({0, start});
while (!q.empty()) {
auto [cost, pos] = q.top(); q.pop();
int i = pos.first, j = pos.second;
if (i == gi && j == gj) {
return true;
}
vector<pair<int, int>> directions = {{-1, 0}, {1, 0}, {0, 1}, {0, -1}};
for (auto [di, dj] : directions) {
int ni = i + di, nj = j + dj;
if (ni >= 0 && ni < n && nj >= 0 && nj < n && !seen[ni][nj]) {
seen[ni][nj] = true;
if (color == c[ni][nj]) {
q.push({cost, {ni, nj}});
} else {
if (cost == mid) {
continue;
} else {
q.push({cost + 1, {ni, nj}});
}
}
}
}
}
return false;
}
int main() {
cin >> n;
c.resize(n, vector<char>(n));
for (int i = 0; i < n; ++i) {
for (int j = 0; j < n; ++j) {
cin >> c[i][j];
}
}
int l = -1, r = n * n;
while (l + 1 < r) {
int mid = (l + r) / 2;
if (bfs(mid, {0, 0}, {n - 1, n - 1}, 'R')) {
r = mid;
} else {
l = mid;
}
}
int ans = r;
l = -1, r = n * 2 + 1;
while (l + 1 < r) {
int mid = (l + r) / 2;
if (bfs(mid, {0, n - 1}, {n - 1, 0}, 'B')) {
r = mid;
} else {
l = mid;
}
}
ans += r;
cout << ans << endl;
return 0;
}
提出情報
| 提出日時 |
|
| 問題 |
C - Routing |
| ユーザ |
noriaoki |
| 言語 |
C++ 20 (gcc 12.2) |
| 得点 |
500 |
| コード長 |
2015 Byte |
| 結果 |
AC |
| 実行時間 |
1126 ms |
| メモリ |
6484 KiB |
ジャッジ結果
| セット名 |
Sample |
All |
| 得点 / 配点 |
0 / 0 |
500 / 500 |
| 結果 |
|
|
| セット名 |
テストケース |
| Sample |
sample-01.txt, sample-02.txt, sample-03.txt, sample-04.txt |
| All |
in01.txt, in02.txt, in03.txt, in04.txt, in05.txt, in06.txt, in07.txt, in08.txt, in09.txt, in10.txt, in11.txt, in12.txt, in13.txt, in14.txt, in15.txt, in16.txt, in17.txt, in18.txt, in19.txt, in20.txt, in21.txt, in22.txt, in23.txt, in24.txt, in25.txt, in26.txt, in27.txt, in28.txt, in29.txt, in30.txt, in31.txt, in32.txt, in33.txt, in34.txt, in35.txt, in36.txt, sample-01.txt, sample-02.txt, sample-03.txt, sample-04.txt |
| ケース名 |
結果 |
実行時間 |
メモリ |
| in01.txt |
AC |
1 ms |
3568 KiB |
| in02.txt |
AC |
1 ms |
3532 KiB |
| in03.txt |
AC |
6 ms |
3512 KiB |
| in04.txt |
AC |
28 ms |
3576 KiB |
| in05.txt |
AC |
134 ms |
3572 KiB |
| in06.txt |
AC |
578 ms |
3900 KiB |
| in07.txt |
AC |
682 ms |
3916 KiB |
| in08.txt |
AC |
760 ms |
4176 KiB |
| in09.txt |
AC |
985 ms |
5956 KiB |
| in10.txt |
AC |
1065 ms |
3900 KiB |
| in11.txt |
AC |
1126 ms |
5816 KiB |
| in12.txt |
AC |
791 ms |
4140 KiB |
| in13.txt |
AC |
713 ms |
3880 KiB |
| in14.txt |
AC |
553 ms |
3696 KiB |
| in15.txt |
AC |
664 ms |
3804 KiB |
| in16.txt |
AC |
718 ms |
3908 KiB |
| in17.txt |
AC |
766 ms |
3852 KiB |
| in18.txt |
AC |
659 ms |
3832 KiB |
| in19.txt |
AC |
444 ms |
3852 KiB |
| in20.txt |
AC |
236 ms |
3788 KiB |
| in21.txt |
AC |
516 ms |
3820 KiB |
| in22.txt |
AC |
423 ms |
3856 KiB |
| in23.txt |
AC |
515 ms |
6336 KiB |
| in24.txt |
AC |
453 ms |
6336 KiB |
| in25.txt |
AC |
646 ms |
6264 KiB |
| in26.txt |
AC |
697 ms |
6336 KiB |
| in27.txt |
AC |
623 ms |
6344 KiB |
| in28.txt |
AC |
597 ms |
6340 KiB |
| in29.txt |
AC |
426 ms |
6484 KiB |
| in30.txt |
AC |
426 ms |
6268 KiB |
| in31.txt |
AC |
573 ms |
3788 KiB |
| in32.txt |
AC |
474 ms |
3808 KiB |
| in33.txt |
AC |
519 ms |
3776 KiB |
| in34.txt |
AC |
521 ms |
3972 KiB |
| in35.txt |
AC |
113 ms |
3808 KiB |
| in36.txt |
AC |
131 ms |
3828 KiB |
| sample-01.txt |
AC |
1 ms |
3468 KiB |
| sample-02.txt |
AC |
1 ms |
3496 KiB |
| sample-03.txt |
AC |
1 ms |
3560 KiB |
| sample-04.txt |
AC |
1 ms |
3456 KiB |