Alex_tz307

School-CCC Snack Vendor - Level 6

Oct 28th, 2020
132
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.45 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. ifstream fin("text.in");
  6. ofstream fout("text.out");
  7.  
  8. const int di[] = {0, -1, -1, -1, 0, 1, 1, 1},
  9.           dj[] = {1, 1, 0, -1, -1, -1, 0, 1};
  10.  
  11. int main() {
  12.     string cell;
  13.     fin >> cell;
  14.     int rows = cell[0] - 'A' + 1, cols = cell[1] - '0';
  15.     if(cell.size() > 2)
  16.         cols = cols * 10 + (cell[2] - '0');
  17.     fin >> cell;
  18.     int i_start = cell[0] - 'A' + 1, j_start = cell[1] - '0';
  19.     if(cell.size() > 2)
  20.         j_start = j_start * 10 + (cell[2] - '0');
  21.     fin >> cell;
  22.     int i_stop = cell[0] - 'A' + 1, j_stop = cell[1] - '0';
  23.     if(cell.size() > 2)
  24.         j_stop = j_stop * 10 + (cell[2] - '0');
  25.     queue < pair < int , int > > Q;
  26.     Q.emplace(i_start, j_start);
  27.     vector < vector < int > > a(rows + 1, vector < int >(cols + 1));
  28.     a[i_start][j_start] = 1;
  29.     auto inside = [&](int lin, int col) {
  30.         return lin > 0 && col > 0 && lin <= rows && col <= cols;
  31.     };
  32.     int dir;
  33.     fin >> dir;
  34.     while(!Q.empty()) {
  35.         int i = Q.front().first,
  36.             j = Q.front().second;
  37.         Q.pop();
  38.         for(int k = 0; k < 8; ++k)
  39.             if(k != dir) {
  40.                 int iv = i + di[k],
  41.                     jv = j + dj[k];
  42.                 if(inside(iv, jv) && a[iv][jv] == 0) {
  43.                     a[iv][jv] = a[i][j] + 1;
  44.                     Q.emplace(iv, jv);
  45.                 }
  46.             }
  47.     }
  48.     fout << a[i_stop][j_stop] - 1;
  49. }
  50.  
Advertisement
Add Comment
Please, Sign In to add comment