用户输出
4
系统信息
Exited with return code 0
编号 | 题目 | 状态 | 分数 | 总时间 | 内存 | 代码 / 答案文件 | 提交者 | 提交时间 |
---|---|---|---|---|---|---|---|---|
#100285 | #1038. 1-04E. zzj & liaoy 想要去摄影 | Accepted | 100 | 688 ms | 496 K | C++ 17 / 2.1 K | Dytchem | 2023-07-11 18:16:04 |
#define _CRT_SECURE_NO_WARNINGS
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
constexpr int MAX = 32;
int targetNum = 0;
char c[MAX][MAX];
const int dx[4] = { 1, 0, -1, 0 }, dy[4] = { 0, 1, 0, -1 };
int ansm = 1 << 30, ans = 0;
int distances[10][MAX][MAX];
bool isVisited[10][MAX][MAX];
void bfs(const pair<int, int> p, const int use) {
// printf("(%d, %d) %d %d\n", p.first, p.second, ans, targetNum);
//
if (targetNum == 0 && ans != 0) {
ansm = ans;
return;
}
memset(isVisited[use], 0, sizeof(isVisited[use]));
distances[use][p.first][p.second] = 0;
isVisited[use][p.first][p.second] = true;
queue<pair<int, int> > q;
q.push(p);
while (!q.empty()) {
pair<int, int> p = q.front();
q.pop();
if (c[p.first][p.second] == '@') {
ans += distances[use][p.first][p.second];
c[p.first][p.second] = '.';
--targetNum;
bfs(p, use + 1);
ans -= distances[use][p.first][p.second];
c[p.first][p.second] = '@';
++targetNum;
}
for (int k = 0; k < 4; ++k) {
int x = p.first + dx[k], y = p.second + dy[k];
if (c[x][y] == '#' || isVisited[use][x][y])
continue;
isVisited[use][x][y] = true;
distances[use][x][y] = distances[use][p.first][p.second] + 1;
if (ans + distances[use][x][y] >= ansm)
return;
q.push(make_pair(x, y));
}
}
}
int main() {
int n, m, i0, j0;
scanf("%d %d", &n, &m);
for (int i = 1; i <= n; ++i) {
scanf("\n");
for (int j = 1; j <= m; ++j) {
scanf("%c", &c[i][j]);
switch (c[i][j]) {
case '.':
break;
case '@':
++targetNum;
break;
case 'p':
i0 = i;
j0 = j;
break;
}
}
}
for (int i = 0; i <= n + 1; ++i) c[i][0] = c[i][m + 1] = '#';
for (int j = 0; j <= m + 1; ++j) c[0][j] = c[n + 1][j] = '#';
/*for (int i = 0;i <= n + 1;++i) {
for (int j = 0;j <= m + 1;++j) {
printf("%c", c[i][j]);
}
printf("\n");
}*/
pair<int, int> p = make_pair(i0, j0);
bfs(p, 0);
if (ansm == 1 << 30)
ansm = -1;
printf("%d", ansm);
return 0;
}
10 10
#.########
####.###@#
##########
######.###
@.#.#p#@##
###..##.##
##.#####.#
#.####@#.#
###@##
<15 bytes omitted>
用户输出
-1
系统信息
Exited with return code 0
10 10
.##.@.#.#.
###..##@#.
...#@#.###
.#.#..#...
#..#.....#
....##..##
..##..@.#p
##....##..
..#...
<15 bytes omitted>
用户输出
-1
系统信息
Exited with return code 0
10 10
.#@......#
...#......
..#.....##
..#..#....
...##..@.@
...@#.#...
#.#..#..#.
.p......##
.#..#.
<15 bytes omitted>
用户输出
30
系统信息
Exited with return code 0
20 20
..##.......@........
..#...#....#..##....
...#.#...#..#.#..#..
..#...#..#@###..##..
..#.#....#
<325 bytes omitted>
用户输出
61
系统信息
Exited with return code 0
30 30
##..##.###........#...#...@##.
#.#..#...##.....#.#.#..##p.#.@
...#.##......#...#.#.....#..#@
#
<835 bytes omitted>
用户输出
12
系统信息
Exited with return code 0
30 30
.....#..#...#.@..#..##.#..#...
.#..##.....##..........#.....#
##...##...#.#.......p...#...#.
#
<835 bytes omitted>
用户输出
83
系统信息
Exited with return code 0
30 30
##.....#.......#.....##...#@..
.......#.##.##..#.#.####.##...
.##......#..#.#.......#.....#.
.
<835 bytes omitted>
用户输出
130
系统信息
Exited with return code 0
30 30
...#..###.....##.#....#...##..
#.#...#..#.#..#..#.######..##.
.##..#.@.#......##...#....#.#.
.
<835 bytes omitted>
用户输出
154
系统信息
Exited with return code 0
30 30
..#...#...#...#........#....##
#.##....##.@#.#.#.#.#..@......
#.....#..@....#..#..##.#..#..#
.
<835 bytes omitted>
用户输出
114
系统信息
Exited with return code 0
30 30
#.######.##.####.#######.#####
##.@####.######.#########.##.#
...######.########.########.##
#
<835 bytes omitted>
用户输出
-1
系统信息
Exited with return code 0