Submission #1144760

#TimeUsernameProblemLanguageResultExecution timeMemory
1144760fabijan_cikacMaze (JOI23_ho_t3)C++20
0 / 100
1 ms584 KiB
#include <bits/stdc++.h> using namespace std; #define pb push_back #define pp pair<int, int> #define F first #define S second const int N = 1010; const int INF = 1e9; int n, m, k; int X1, Y1, X2, Y2; char a[N][N]; int dist[N][N]; int dx[4] = {-1, 1, 0, 0}; int dy[4] = {0, 0, -1, 1}; bool inb(int x, int y){ return (x >= 0 && x < n && y >= 0 && y < m); } void fill(int l1, int l2, int r1, int r2, int x){ for (int i = l1; i <= l2; ++i) for (int j = r1; j <= r2; ++j) if (inb(i, j)) dist[i][j] = min(dist[i][j], x); } int main(){ cin >> n >> m >> k; cin >> X1 >> Y1 >> X2 >> Y2; --X1, --Y1, --X2, --Y2; for (int i = 0; i < n; ++i) for (int j = 0; j < m; ++j) cin >> a[i][j]; for (int i = 0; i < n; ++i) for (int j = 0; j < m; ++j) dist[i][j] = INF; dist[X1][Y1] = 0; vector<pair<int, pp> > v; for (int i = 0; i < n; ++i) for (int j = 0; j < m; ++j) v.pb({abs(i - X1) + abs(j - Y1), {i, j}}); sort(v.begin(), v.end()); for (auto p: v){ int x = p.S.F, y = p.S.S; fill(x - k + 1, x + k - 1, y - k, y + k, dist[x][y] + 1); fill(x - k, x + k, y - k + 1, y + k - 1, dist[x][y] + 1); for (int i = 0; i < 4; ++i) if (inb(x + dx[i], y + dy[i]) && a[x + dx[i]][y + dy[i]] == '.') dist[x + dx[i]][y + dy[i]] = min(dist[x + dx[i]][y + dy[i]], dist[x][y]); } cout << dist[X2][Y2]; 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...