Naxocist

Raider

May 8th, 2022 (edited)
135
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.17 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. using ll = long long;
  5. using pi = pair<int, int>;
  6. using pii = pair<int, pi>;
  7. using tiii = tuple<int, int, int>;
  8.  
  9. const int N = 105;
  10. int ar[N][N], dis[N][N];
  11. int rr[] = {-1, -1, 0, 0, 1, 1}, cc[2][6] = {{0, 1, -1, 1, 0, 1}, {-1, 0, -1, 1, -1, 0}}; // odd even (base 1)
  12.  
  13.  
  14. int main() {
  15.     // freopen("input.in", "r", stdin);
  16.  
  17.     int n, m; scanf("%d%d", &n, &m);
  18.  
  19.     for(int i=1; i<=n; ++i){
  20.         for(int j=1; j<=m; ++j) scanf("%d", &ar[i][j]);
  21.     }
  22.  
  23.     queue<tiii> q;
  24.     int md = (n-1)/2 + 1;
  25.  
  26.     q.emplace(0, md, 0);
  27.  
  28.     while(q.size()){
  29.         int mv, r, c;
  30.         tie(mv, r, c) = q.front(); q.pop();
  31.  
  32.         if(r == md && c == m){
  33.             printf("%d", mv);
  34.             return 0;
  35.         }
  36.        
  37.         mv ++;
  38.         for(int i=0; i<6; ++i){
  39.             int h = r + rr[i], k = c + cc[r&1^1][i];
  40.            
  41.             if(h < 1 || k < 1 || h > n || k > m || ar[h][k] == 0 || dis[h][k] == mv || mv % ar[h][k]) continue ;
  42.  
  43.             dis[h][k] = mv;
  44.             q.emplace(mv, h, k);
  45.         }
  46.  
  47.     }
  48.  
  49.     return 0;
  50. }
  51.  
  52. /*
  53. 5
  54. 4
  55. 1 1 3 8
  56. 0 1 1 0
  57. 1 6 5 7
  58. 1 3 2 3
  59. 2 5 2 0
  60. */
Add Comment
Please, Sign In to add comment