编号 题目 状态 分数 总时间 内存 代码 / 答案文件 提交者 提交时间
#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;
}
子任务 #1
Accepted
得分:100
测试点 #1
Accepted
得分:100
用时:6 ms
内存:328 KiB

输入文件(1.in

3 3
p@#
#..
..@

答案文件(1.out

4

用户输出

4

系统信息

Exited with return code 0
测试点 #2
Accepted
得分:100
用时:3 ms
内存:244 KiB

输入文件(2.in

3 3
p##
@#@
###

答案文件(2.out

-1

用户输出

-1

系统信息

Exited with return code 0
测试点 #3
Accepted
得分:100
用时:4 ms
内存:340 KiB

输入文件(3.in

5 5
...@.
#####
###.@
#@p#@
..#.#

答案文件(3.out

-1

用户输出

-1

系统信息

Exited with return code 0
测试点 #4
Accepted
得分:100
用时:5 ms
内存:352 KiB

输入文件(4.in

5 5
.@.@#
#.p..
...##
.@..@
##@#.

答案文件(4.out

12

用户输出

12

系统信息

Exited with return code 0
测试点 #5
Accepted
得分:100
用时:3 ms
内存:272 KiB

输入文件(5.in

10 10
#.########
####.###@#
##########
######.###
@.#.#p#@##
###..##.##
##.#####.#
#.####@#.#
###@##
<15 bytes omitted>

答案文件(5.out

-1

用户输出

-1

系统信息

Exited with return code 0
测试点 #6
Accepted
得分:100
用时:4 ms
内存:256 KiB

输入文件(6.in

10 10
.##.@.#.#.
###..##@#.
...#@#.###
.#.#..#...
#..#.....#
....##..##
..##..@.#p
##....##..
..#...
<15 bytes omitted>

答案文件(6.out

-1

用户输出

-1

系统信息

Exited with return code 0
测试点 #7
Accepted
得分:100
用时:4 ms
内存:256 KiB

输入文件(7.in

10 10
.#@......#
...#......
..#.....##
..#..#....
...##..@.@
...@#.#...
#.#..#..#.
.p......##
.#..#.
<15 bytes omitted>

答案文件(7.out

30

用户输出

30

系统信息

Exited with return code 0
测试点 #8
Accepted
得分:100
用时:4 ms
内存:332 KiB

输入文件(8.in

20 20
..##.......@........
..#...#....#..##....
...#.#...#..#.#..#..
..#...#..#@###..##..
..#.#....#
<325 bytes omitted>

答案文件(8.out

61

用户输出

61

系统信息

Exited with return code 0
测试点 #9
Accepted
得分:100
用时:3 ms
内存:348 KiB

输入文件(9.in

30 30
##..##.###........#...#...@##.
#.#..#...##.....#.#.#..##p.#.@
...#.##......#...#.#.....#..#@
#
<835 bytes omitted>

答案文件(9.out

12

用户输出

12

系统信息

Exited with return code 0
测试点 #10
Accepted
得分:100
用时:6 ms
内存:384 KiB

输入文件(10.in

30 30
.....#..#...#.@..#..##.#..#...
.#..##.....##..........#.....#
##...##...#.#.......p...#...#.
#
<835 bytes omitted>

答案文件(10.out

83

用户输出

83

系统信息

Exited with return code 0
测试点 #11
Accepted
得分:100
用时:135 ms
内存:388 KiB

输入文件(11.in

30 30
##.....#.......#.....##...#@..
.......#.##.##..#.#.####.##...
.##......#..#.#.......#.....#.
.
<835 bytes omitted>

答案文件(11.out

130

用户输出

130

系统信息

Exited with return code 0
测试点 #12
Accepted
得分:100
用时:229 ms
内存:360 KiB

输入文件(12.in

30 30
...#..###.....##.#....#...##..
#.#...#..#.#..#..#.######..##.
.##..#.@.#......##...#....#.#.
.
<835 bytes omitted>

答案文件(12.out

154

用户输出

154

系统信息

Exited with return code 0
测试点 #13
Accepted
得分:100
用时:276 ms
内存:496 KiB

输入文件(13.in

30 30
..#...#...#...#........#....##
#.##....##.@#.#.#.#.#..@......
#.....#..@....#..#..##.#..#..#
.
<835 bytes omitted>

答案文件(13.out

114

用户输出

114

系统信息

Exited with return code 0
测试点 #14
Accepted
得分:100
用时:3 ms
内存:256 KiB

输入文件(14.in

30 30
#.######.##.####.#######.#####
##.@####.######.#########.##.#
...######.########.########.##
#
<835 bytes omitted>

答案文件(14.out

-1

用户输出

-1

系统信息

Exited with return code 0
测试点 #15
Accepted
得分:100
用时:3 ms
内存:360 KiB

输入文件(15.in

30 30
########.###.###.###.###.##.##
######.####..#.###.###########
########.####.#########.######
.
<835 bytes omitted>

答案文件(15.out

11

用户输出

11

系统信息

Exited with return code 0