Submission #1040093

#TimeUsernameProblemLanguageResultExecution timeMemory
1040093TAhmed33Maze (JOI23_ho_t3)C++98
100 / 100
350 ms68564 KiB
#include<bits/stdc++.h> using namespace std; const int dx[4] = {-1, +1, 0, 0}; const int dy[4] = {0, 0, -1, +1}; int main(){ ios_base::sync_with_stdio(0); cin.tie(0); int n, m, k, r1, c1, r2, c2; cin >> n >> m >> k >> r1 >> c1 >> r2 >> c2; --r1, --c1, --r2, --c2; vector<vector<int>> d(n, vector<int>(m, -1)); vector<vector<char>> a(n, vector<char>(m)); for(int i = 0; i < n; ++i){ for(int j = 0; j < m; ++j){ cin >> a[i][j]; } } queue<pair<int, int>> q1; queue<tuple<int, int, int, int>> q2; q1.push({r1, c1}); d[r1][c1] = 0; auto inside = [&](int x, int y){ return -1 < x && x < n && -1 < y && y < m; }; while(!q1.empty() || !q2.empty()){ while(!q1.empty()){ int x, y; tie(x, y) = q1.front(); q1.pop(); for(int i = 0; i < 4; ++i){ int new_x = x + dx[i]; int new_y = y + dy[i]; if(inside(new_x, new_y) && d[new_x][new_y] == -1){ if(a[new_x][new_y] == '.'){ d[new_x][new_y] = d[x][y]; q1.push({new_x, new_y}); } else{ d[new_x][new_y] = d[x][y] + 1; q2.push({new_x, new_y, k - 1, k - 1}); } } } } while(!q2.empty()){ int x, y, sx, sy; tie(x, y, sx, sy) = q2.front(); q2.pop(); if(sx == 0 || sy == 0){ q1.push({x, y}); } for(int i = 0; i < 4; ++i){ int new_x = x + dx[i]; int new_y = y + dy[i]; int new_sx = sx - abs(dx[i]); int new_sy = sy - abs(dy[i]); if(inside(new_x, new_y) && d[new_x][new_y] == -1 && new_sx >= 0 && new_sy >= 0){ d[new_x][new_y] = d[x][y]; q2.push({new_x, new_y, new_sx, new_sy}); } } } } cout << d[r2][c2] << '\n'; return 0; }
#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...