191852025-11-28 14:38:45szilLegközelebbi mezőkcpp17Accepted 100/100465ms42492 KiB
#include <bits/stdc++.h>

using namespace std;
using ll = long long;

const int MAXN = 2001;
const int INF = 1e9;

int n, m;

const pair<int, int> DIR[4] = {{0, 1}, {0, -1}, {1, 0}, {-1, 0}};

bool is_ok(int i, int j) {
    return 1 <= i && i <= n && 1 <= j && j <= m;
}

int dist[MAXN][MAXN];
char c[MAXN][MAXN];
bool vis1[MAXN][MAXN], vis2[MAXN][MAXN];

void dfs1(int x, int y) {
    vis1[x][y] = 1;
    for (auto [dx, dy] : DIR) {
        int nx = x + dx;
        int ny = y + dy;
        if (is_ok(nx, ny) && !vis1[nx][ny] && c[nx][ny] != '#') {
            dfs1(nx, ny);
        }
    }
}

void dfs2(int x, int y) {
    vis2[x][y] = 1;
    for (auto [dx, dy] : DIR) {
        int nx = x + dx;
        int ny = y + dy;
        if (is_ok(nx, ny) && !vis2[nx][ny] && c[nx][ny] != '#') {
            dfs2(nx, ny);
        }
    }
}

void bfs() {
    queue<pair<int, int>> q;
    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= m; j++) {
            if (vis1[i][j]) {
                q.push({i, j});
            } else {
                dist[i][j] = INF;
            }
        }
    }
    while (!q.empty()) {
        auto [x, y] = q.front(); q.pop();
        for (auto [dx, dy] : DIR) {
            int nx = x + dx;
            int ny = y + dy;
            if (is_ok(nx, ny) && dist[nx][ny] > dist[x][y] + 1) {
                dist[nx][ny] = dist[x][y] + 1;
                q.push({nx, ny});
            }
        }
    }
}

int main() {
    cin >> n >> m;
    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= m; j++) {
            cin >> c[i][j];
        }
    }

    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= m; j++) {
            if (c[i][j] == 'A') {
                dfs1(i, j);
            }
            if (c[i][j] == 'B') {
                dfs2(i, j);
            }
        }
    }
    bfs();
    int ans = INF;
    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= m; j++) {
            if (vis2[i][j]) ans = min(ans, dist[i][j]);
        }
    }
    cout << ans << "\n";
    return 0;
}
SubtaskSumTestVerdictTimeMemory
subtask10/0
1Accepted1ms316 KiB
2Accepted1ms500 KiB
3Accepted1ms316 KiB
subtask210/10
4Accepted1ms316 KiB
5Accepted1ms316 KiB
6Accepted1ms508 KiB
7Accepted3ms1100 KiB
8Accepted3ms1220 KiB
9Accepted3ms1016 KiB
10Accepted3ms1076 KiB
11Accepted2ms1076 KiB
12Accepted2ms820 KiB
13Accepted3ms1076 KiB
14Accepted3ms1332 KiB
subtask320/20
15Accepted28ms10772 KiB
16Accepted29ms12844 KiB
17Accepted256ms34428 KiB
18Accepted175ms27192 KiB
19Accepted27ms11064 KiB
20Accepted34ms12764 KiB
21Accepted21ms2356 KiB
22Accepted215ms16696 KiB
23Accepted21ms2100 KiB
24Accepted221ms17972 KiB
subtask420/20
25Accepted1ms316 KiB
26Accepted1ms316 KiB
27Accepted1ms508 KiB
28Accepted97ms13108 KiB
29Accepted90ms12864 KiB
30Accepted79ms11572 KiB
31Accepted90ms16324 KiB
32Accepted71ms11664 KiB
33Accepted100ms14644 KiB
34Accepted101ms15444 KiB
35Accepted71ms12556 KiB
36Accepted98ms16692 KiB
37Accepted96ms16692 KiB
38Accepted184ms14384 KiB
39Accepted381ms24116 KiB
40Accepted404ms24116 KiB
41Accepted386ms23952 KiB
42Accepted407ms24116 KiB
subtask550/50
43Accepted1ms316 KiB
44Accepted1ms316 KiB
45Accepted1ms508 KiB
46Accepted3ms1100 KiB
47Accepted3ms1220 KiB
48Accepted3ms1016 KiB
49Accepted3ms1076 KiB
50Accepted2ms1076 KiB
51Accepted2ms820 KiB
52Accepted3ms1076 KiB
53Accepted3ms1332 KiB
54Accepted28ms10772 KiB
55Accepted29ms12844 KiB
56Accepted256ms34428 KiB
57Accepted175ms27192 KiB
58Accepted27ms11064 KiB
59Accepted34ms12764 KiB
60Accepted21ms2356 KiB
61Accepted215ms16696 KiB
62Accepted21ms2100 KiB
63Accepted221ms17972 KiB
64Accepted97ms13108 KiB
65Accepted90ms12864 KiB
66Accepted79ms11572 KiB
67Accepted90ms16324 KiB
68Accepted71ms11664 KiB
69Accepted100ms14644 KiB
70Accepted101ms15444 KiB
71Accepted71ms12556 KiB
72Accepted98ms16692 KiB
73Accepted96ms16692 KiB
74Accepted184ms14384 KiB
75Accepted381ms24116 KiB
76Accepted404ms24116 KiB
77Accepted386ms23952 KiB
78Accepted407ms24116 KiB
79Accepted115ms23348 KiB
80Accepted112ms20020 KiB
81Accepted85ms18484 KiB
82Accepted79ms16436 KiB
83Accepted97ms19252 KiB
84Accepted119ms27956 KiB
85Accepted86ms16180 KiB
86Accepted78ms17184 KiB
87Accepted112ms18740 KiB
88Accepted114ms21552 KiB
89Accepted81ms16788 KiB
90Accepted108ms18520 KiB
91Accepted115ms19764 KiB
92Accepted109ms16188 KiB
93Accepted108ms19120 KiB
94Accepted112ms19612 KiB
95Accepted115ms20788 KiB
96Accepted111ms14132 KiB
97Accepted108ms19252 KiB
98Accepted78ms15016 KiB
99Accepted319ms29748 KiB
100Accepted395ms42492 KiB
101Accepted109ms18996 KiB
102Accepted321ms34624 KiB
103Accepted365ms40132 KiB
104Accepted456ms37172 KiB
105Accepted426ms34100 KiB
106Accepted465ms40172 KiB
107Accepted441ms33336 KiB