Submission #1299635

#TimeUsernameProblemLanguageResultExecution timeMemory
1299635mduchelloMaze (JOI23_ho_t3)C++20
0 / 100
1 ms572 KiB
#include <bits/stdc++.h>
using namespace std;

const int INF = 1e9;
int H, W, K;
vector<string> a;
int dist[2005][2005];

int dx[4] = {1, -1, 0, 0};
int dy[4] = {0, 0, 1, -1};

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    cin >> H >> W >> K;
    int sx, sy, tx, ty;
    cin >> sx >> sy >> tx >> ty;
    sx--, sy--, tx--, ty--;
    a.resize(H);
    for (int i = 0; i < H; i++) cin >> a[i];

    deque<pair<int,int>> dq;

    // dist[y][x] = số operations ít nhất
    for(int i=0; i<H; i++)
        for(int j=0; j<W; j++)
            dist[i][j] = INF;

    dist[sx][sy] = 0;
    dq.push_front({sx, sy});

    while(!dq.empty()) {
        auto [x, y] = dq.front();
        dq.pop_front();

        // BFS trắng (0 cost)
        for(int d=0; d<4; d++){
            int nx = x + dx[d];
            int ny = y + dy[d];

            if(nx<0 || ny<0 || nx>=H || ny>=W) continue;

            // đi sang ô trắng = không tốn cost
            if(a[nx][ny] == '.' && dist[nx][ny] > dist[x][y]) {
                dist[nx][ny] = dist[x][y];
                dq.push_front({nx, ny});
            }
        }

        // Nếu phá tường (mở rộng K ô)
        int cost = dist[x][y] + 1;
        for(int i = max(0, x - K); i <= min(H - 1, x + K); i++){
            for(int j = max(0, y - K); j <= min(W - 1, y + K); j++){
                // Chỉ xét ô còn chưa tối ưu
                if(dist[i][j] > cost){
                    dist[i][j] = cost;
                    dq.push_back({i, j});
                }
            }
        }
    }

    cout << (dist[tx][ty] == INF ? -1 : dist[tx][ty]) << "\n";
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...