Problem p02644 (C++) — buggy submission, verdict: Runtime Error

#include <bits/stdc++.h>
#define ff first
#define se second
using namespace std;
int n, m, a, b, c, d, k;
const int inf = 1e8 + 5;
queue<pair<pair<int, int>, int>> q;
bool cek(int a, int b) {
  if (a >= 1 && a <= n && b >= 1 && b <= m)
    return true;
  return false;
}
int main() {
  cin >> n >> m >> k >> a >> b >> c >> d;
  int flag[n + 2][m + 2] = {inf};
  char arr[n + 2][m + 3] = {'*'};
  for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= m; j++)
      cin >> arr[i][j];
  }
  q.push({{a, b}, 0});
  flag[a][b] = 0;
  while (!q.empty()) {
    int x, y, z;
    x = q.front().ff.ff;
    y = q.front().ff.se;
    z = q.front().se;
    q.pop();
    // cout<<x<<" "<<y<<" "<<z<<endl;
    if (x == c && y == d) {
      cout << flag[c][d] << endl;
      return 0;
    }
    for (int i = 1; i <= k; i++) {
      if (cek(x, y - i) && flag[x][y - i] == 0 && arr[x][y - i] != '@')
        flag[x][y - i] = z + 1, q.push({{x, y - i}, z + 1});
      else if (!cek(x, y - i) || arr[x][y - i] == '@' || flag[x][y - i] <= z)
        break;
    }
    for (int i = 1; i <= k; i++) {
      if (cek(x + i, y) && flag[x + i][y] == 0 && arr[x + i][y] != '@')
        flag[x + i][y] = z + 1, q.push({{x + i, y}, z + 1});
      else if (!cek(x + i, y) || arr[x + i][y] == '@' || flag[x + i][y] <= z)
        break;
    }
    for (int i = 1; i <= k; i++) {
      if (cek(x, y + i) && flag[x][y + i] == 0 && arr[x][y + i] != '@')
        flag[x][y + i] = z + 1, q.push({{x, y + i}, z + 1});
      else if (!cek(x, y + i) || arr[x][y + i] == '@' || flag[x][y + i] <= z)
        break;
    }
    for (int i = 1; i <= k; i++) {
      if (cek(x - i, y) && flag[x - i][y] == 0 && arr[x - i][y] != '@')
        flag[x - i][y] = z + 1, q.push({{x - i, y}, z + 1});
      else if (!cek(x - i, y) || arr[x - i][y] == '@' || flag[x - i][y] <= z)
        break;
    }
  }
  cout << "-1" << endl;
}

Error: 0

Fixed submission:

// Shariful Islam(1804011)
// Chittagong University of Engineering & technology
#include <bits/stdc++.h>
#define pb push_back
#define fin(i, arr, n)                                                         \\
  for (i = 0; i < n; i++)                                                      \\
  cin >> arr[i]
#define fout(i, arr, n)                                                        \\
  for (i = 0; i < n; i++)                                                      \\
  cout << arr[i] << " "
#define inf 9223372036854775807
#define vi vector<ll>
#define init ll n, m, a, i, b, j, k, t, x, y, z, tc, u, v, w
#define pi acos(-1.00)
#define mod 1000000007
using namespace std;
typedef long long ll;
struct node {
  ll r, c;
} n1;
ll dr[] = {-1, 0, 1, 0};
ll dc[] = {0, -1, 0, 1};
ll R, C, a, b, x, y, k;
ll visited[1000005] = {0};
char ch[1000005];
ll rsum[1000005] = {0};
ll csum[1000005] = {0};
ll f(ll i, ll j) { return i * C + j + 1; }
bool valid(ll r, ll c) {
  return (r >= 0 && c >= 0 && r < R && c < C && visited[f(r, c)] == 0);
}

node inv(ll t) {
  node n1;
  if (t % C == 0) {
    n1.r = t / C - 1;
    n1.c = C - 1;
  } else {
    n1.r = t / C;
    n1.c = (t % C) - 1;
  }
  return n1;
}
ll fsum(ll i, ll r, ll c, ll tt) {
  if (tt % 2 == 0) {
    if (r == 0)
      return csum[f(c, i)];
    else
      return csum[f(c, i)] - csum[f(r - 1, i)];
  } else {
    if (r == 0)
      return rsum[f(i, c)];
    else
      return rsum[f(i, c)] - rsum[f(i, r - 1)];
  }
}
ll bfs(ll r1, ll c1, ll r2, ll c2) {
  ll dist[100005] = {0};
  ll i, j;
  queue<ll> Q;
  Q.push(f(r1, c1));
  visited[f(r1, c1)] = 1;
  dist[f(r1, c1)] = 0;
  while (!Q.empty()) {
    ll u = Q.front();
    Q.pop();
    n1 = inv(u);
    for (i = 0; i < 4; i++) {
      for (j = 1; j <= k; j++) {
        if (valid(n1.r + dr[i] * j, n1.c + dc[i] * j)) {
          if (i % 2 == 0 &&
              fsum(n1.c + dc[i] * j, n1.r, n1.r + dr[i] * j, i) == 0) {
            ll v = f(n1.r + dr[i] * j, n1.c + dc[i] * j);
            visited[v] = 1;
            dist[v] = dist[u] + 1;
            if (v == f(r2, c2))
              return dist[v];
            Q.push(v);
          } else if (i % 2 == 1 &&
                     fsum(n1.r + dr[i] * j, n1.c, n1.c + dc[i] * j, i) == 0) {
            ll v = f(n1.r + dr[i] * j, n1.c + dc[i] * j);
            visited[v] = 1;
            dist[v] = dist[u] + 1;
            if (v == f(r2, c2))
              return dist[v];
            Q.push(v);
          }
        }
      }
    }
  }
  return -1;
}
int main() { // ios_base::sync_with_stdio(false);  cin.tie(NULL); cout.tie(0);
  // freopen("read.txt","r",stdin);
  // freopen("write.txt","w",stdout);
  ll i, j, p, q, x;
  scanf("%lld %lld %lld %lld %lld %lld %lld", &R, &C, &k, &a, &b, &x, &y);
  for (i = 0; i < R; i++) {
    for (j = 0; j < C; j++) {
      char c;
      cin >> c;
      ch[i * C + j + 1] = c;
      if (c == '@')
        visited[i * C + j + 1] = 1;
      if (j == 0)
        rsum[f(i, j)] = (c == '@');
      else
        rsum[f(i, j)] = (c == '@') + rsum[f(i, j - 1)];
      if (i == 0)
        csum[f(i, j)] = (c == '@');
      else
        csum[f(i, j)] = (c == '@') + csum[f(i - 1, j)];
    }
  }
  /*f(i,R)
  {
      f(j,C)
      cout<<visit[i*C+j+1];
      cout<<endl;
  }*/
  /* for(i=0;i<R;i++)
   {
       for(j=0;j<C;j++)
       {
           cout<<rsum[f(i,j)]<<" ";
       }
       cout<<endl;
   }
   cout<<"__________"<<endl;
   for(i=0;i<R;i++)
   {
       for(j=0;j<C;j++)
       {
           cout<<csum[f(i,j)]<<" ";
       }
       cout<<endl;
   }*/
  cout << bfs(a - 1, b - 1, x - 1, y - 1) << endl;
}