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...