Advertisement
pb_jiang

t2

Dec 20th, 2023
648
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.26 KB | None | 0 0
  1. #include <assert.h>
  2. #include <bits/stdc++.h>
  3. using namespace std;
  4.  
  5. vector<vector<int>> min_dist;
  6. int dirs[4][2] = {{0, 1}, {0, -1}, {1, 0}, {-1, 0}};
  7.  
  8. void dfs(const vector<vector<int>> &g, int m, int n, int th, int x, int y)
  9. {
  10.     for (int i = 0; i < 4; ++i) {
  11.         int nx = x + dirs[i][0], ny = y + dirs[i][1];
  12.         if (nx >= 0 && nx < m && ny >= 0 && ny < n && g[nx][ny] >= th) {
  13.             if (min_dist[nx][ny] > min_dist[x][y] + 1) {
  14.                 min_dist[nx][ny] = min_dist[x][y] + 1;
  15.                 dfs(g, m, n, th, nx, ny);
  16.             }
  17.         }
  18.     }
  19. }
  20.  
  21. int main(int argc, char **argv)
  22. {
  23.     int th, m, n, p;
  24.     cin >> th >> m >> n >> p;
  25.     vector<vector<int>> g(m, vector<int>(n));
  26.     min_dist = vector<vector<int>>(m, vector<int>(n, 1e9));
  27.     for (int i = 0; i < p; ++i) {
  28.         int x, y, d;
  29.         cin >> x >> y >> d;
  30.         for (int a = x - d + 1; a < x + d; ++a)
  31.             if (a >= 0 && a < m)
  32.                 for (int b = y - (d - abs(a - x)) + 1; b < y + d - abs(a - x); ++b)
  33.                     if (b >= 0 && b < n)
  34.                         g[a][b] = max(g[a][b], d - abs(a - x) - abs(b - y));
  35.     }
  36.     min_dist[0][0] = 0;
  37.     dfs(g, m, n, th, 0, 0);
  38.     cout << min_dist[m - 1][n - 1] << endl;
  39.     return 0;
  40. };
  41.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement