Advertisement
Why7090

Untitled

Jan 19th, 2020
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.74 KB | None | 0 0
  1. // http://www.usaco.org/index.php?page=viewproblem2&cpid=695
  2. #include <bits/stdc++.h>
  3. #include <bits/extc++.h>
  4.  
  5. #define PROBLEM_NAME "cownav"
  6.  
  7. using namespace std;
  8.  
  9. #define FOR(i, l, r) for (int i = l; i < r; ++i)
  10.  
  11. const int stepI[4] = {1, 0, -1, 0};
  12. const int stepJ[4] = {0, 1, 0, -1};
  13.  
  14. int N;
  15. bool grid[20][20];
  16. bool vis[20][20][20][20][4] = {false};
  17.  
  18. void move(int &i, int &j, int &r) {
  19.     if (i == N-1 && j == N-1) return;
  20.     int ii = i + stepI[r];
  21.     int jj = j + stepJ[r];
  22.     if (ii >= 0 && jj >= 0 && ii < N && jj < N && !grid[ii][jj]) {
  23.         i = ii, j = jj;
  24.     }
  25. }
  26.  
  27. int main() {
  28.     ios_base::sync_with_stdio(false); cin.tie(nullptr);
  29.     freopen(PROBLEM_NAME ".in", "r", stdin); freopen(PROBLEM_NAME ".out", "w", stdout);
  30.  
  31.     cin >> N;
  32.     FOR(i, 0, N) FOR(j, 0, N) {
  33.         char c;
  34.         cin >> c;
  35.         grid[i][j] = c == 'H';
  36.     }
  37.     queue<tuple<int, int, int, int, int, int>> Q;
  38.     Q.emplace(0, 0, 0, 0, 0, 0);
  39.     vis[0][0][0][0][0] = true;
  40.     int i, j, ii, jj, r, s;
  41.     while (!Q.empty()) {
  42.         tie(i, j, ii, jj, r, s) = Q.front();
  43.         if (i == N-1 && j == N-1 && ii == N-1 && jj == N-1) {
  44.             cout << s << endl;
  45.             return 0;
  46.         }
  47.         Q.pop();
  48.         if (!vis[i][j][ii][jj][(r+1)%4]) {
  49.             vis[i][j][ii][jj][(r+1)%4] = true;
  50.             Q.emplace(i, j, ii, jj, (r+1)%4, s+1);
  51.         }
  52.         if (!vis[i][j][ii][jj][(r+3)%4]) {
  53.             vis[i][j][ii][jj][(r+3)%4] = true;
  54.             Q.emplace(i, j, ii, jj, (r+3)%4, s+1);
  55.         }
  56.         move(i, j, r);
  57.         move(ii, jj, (r+1)%4);
  58.         if (!vis[i][j][ii][jj][r]) {
  59.             vis[i][j][ii][jj][r] = true;
  60.             Q.emplace(i, j, ii, jj, r, s+1);
  61.         }
  62.     }
  63.     return 1;
  64. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement