Submission #1239400

#TimeUsernameProblemLanguageResultExecution timeMemory
1239400ikrogipogiMaze (JOI23_ho_t3)C++20
0 / 100
0 ms328 KiB
#include <iostream> #include <deque> #include <vector> using namespace std; const int INF = 1e9; const int MAX = 2005; int R, C, N; int Sr, Sc, Gr, Gc; char grid[MAX][MAX]; int dist[MAX][MAX]; bool visited[MAX][MAX]; int dx[4] = {-1, 1, 0, 0}; int dy[4] = {0, 0, -1, 1}; bool in_bounds(int x, int y) { return x >= 0 && x < R && y >= 0 && y < C; } int main() { cin >> R >> C >> N; cin >> Sr >> Sc; cin >> Gr >> Gc; Sr--; Sc--; Gr--; Gc--; for (int i = 0; i < R; ++i) cin >> grid[i]; for (int i = 0; i < R; ++i) for (int j = 0; j < C; ++j) dist[i][j] = INF; deque<pair<int, int>> dq; dq.push_front({Sr, Sc}); dist[Sr][Sc] = 0; while (!dq.empty()) { auto [x, y] = dq.front(); dq.pop_front(); for (int d = 0; d < 4; ++d) { int nx = x + dx[d], ny = y + dy[d]; if (in_bounds(nx, ny) && grid[nx][ny] == '.' && dist[nx][ny] > dist[x][y]) { dist[nx][ny] = dist[x][y]; dq.push_front({nx, ny}); } } for (int i = max(0, x - N + 1); i <= min(R - N, x); ++i) { for (int j = max(0, y - N + 1); j <= min(C - N, y); ++j) { for (int a = i; a < i + N; ++a) { for (int b = j; b < j + N; ++b) { if (dist[a][b] > dist[x][y] + 1) { dist[a][b] = dist[x][y] + 1; dq.push_back({a, b}); } } } } } } cout << dist[Gr][Gc] << '\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...