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

#include <bits/stdc++.h>
using namespace std;
#define int long long // <-----!!!!!!!!!!!!!!!!!!!

#define rep(i, n) for (int i = 0; i < (n); i++)
#define rep2(i, a, b) for (int i = (a); i < (b); i++)
#define rrep(i, n) for (int i = (n)-1; i >= 0; i--)
#define rrep2(i, a, b) for (int i = (a)-1; i >= b; i--)
#define all(a) (a).begin(), (a).end()
#define rall(a) (a).rbegin(), (a).rend()
#define printV(v)                                                              \\
  for (auto x : v) {                                                           \\
    cout << x << " ";                                                          \\
  }                                                                            \\
  cout << endl
#define printVS(vs)                                                            \\
  for (auto x : vs) {                                                          \\
    cout << x << endl;                                                         \\
  }
#define printVV(vv)                                                            \\
  for (auto v : vv) {                                                          \\
    for (auto &&x : v) {                                                       \\
      cout << x << " ";                                                        \\
    }                                                                          \\
    cout << endl;                                                              \\
  }
#define printP(p) cout << p.first << " " << p.second << endl
#define printVP(vp)                                                            \\
  for (auto p : vp)                                                            \\
    printP(p);

typedef long long ll;
typedef pair<int, int> Pii;
// typedef tuple<int, int, int> TUPLE;
typedef vector<int> vi;
typedef vector<vi> vvi;
typedef vector<vvi> vvvi;
typedef vector<Pii> vp;
typedef vector<vector<int>> Graph;
const int inf = 1e9;
const int mod = 1e9 + 7;

typedef tuple<int, int, int, int> TUPLE;

const int MAX_H = 52;
const int MAX_W = 52;
bool done[MAX_H][MAX_W][MAX_H][MAX_W];
vector<vector<string>> s;
int H, W;
vector<int> sx(2), sy(2), gx(2), gy(2);

// N, E, S, W
// kagamiawase
const int dx[2][4] = {{-1, 0, 1, 0}, {-1, 0, 1, 0}};
const int dy[2][4] = {{0, 1, 0, -1}, {0, -1, 0, 1}};

bool bfs() {
  queue<TUPLE> que;
  que.emplace(sx[0], sy[0], sx[1], sy[1]);
  done[sx[0]][sy[0]][sx[1]][sy[1]] = true;
  while (!que.empty()) {
    int x0, y0, x1, y1;
    tie(x0, y0, x1, y1) = que.front();
    que.pop();
    if (x0 == gx[0] && y0 == gy[0] && x1 == gx[1] && y1 == gy[1])
      return true;
    rep(k, 4) {
      int nx0 = x0 + dx[0][k];
      int ny0 = y0 + dy[0][k];
      int nx1 = x1 + dx[1][k];
      int ny1 = y1 + dy[1][k];

      if ((nx0 == gx[0] && ny0 == gy[0]) ^ (nx1 == gx[1] && ny1 == gy[1])) {
        continue;
      }

      if (!done[nx0][ny0][nx1][ny1] && s[0][nx0][ny0] == '.' &&
          s[1][nx1][ny1] == '.') {
        que.emplace(nx0, ny0, nx1, ny1);
        done[nx0][ny0][nx1][ny1] = true;
      } else if (!done[nx0][ny0][x1][y1] && s[0][nx0][ny0] == '.' &&
                 s[1][nx1][ny1] == '#') {
        que.emplace(nx0, ny0, x1, y1);
        done[nx0][ny0][x1][y1] = true;
      } else if (!done[x0][y0][nx1][ny1] && s[0][nx0][ny0] == '#' &&
                 s[1][nx1][ny1] == '.') {
        que.emplace(x0, y0, nx1, ny1);
        done[x0][y0][nx1][ny1] = true;
      }
    }
  }
  return false;
}

signed main() {
  std::ios::sync_with_stdio(false);
  std::cin.tie(0);

  int t = 0;
  while (cin >> W >> H, W) {
    H += 2;
    W += 2;

    s.clear();
    s.resize(2, vector<string>(H, string(W, '#')));
    rep2(i, 1, H - 1) {
      rep(b, 2) {
        cin >> s[b][i];
        s[b][i] = "#" + s[b][i] + "#";
      }
    }

    rep(b, 2) {
      rep(i, H) {
        rep(j, W) {
          if (s[b][i][j] == (b ? 'R' : 'L')) {
            sx[b] = i, sy[b] = j;
            s[b][i][j] = '.';
          }
          if (s[b][i][j] == '%') {
            gx[b] = i, gy[b] = j;
            s[b][i][j] = '.';
          }
        }
      }
    }

    rep(x0, H) rep(y0, W) rep(x1, H) rep(y1, W) done[x0][y0][x1][y1] = false;
    cout << (bfs() ? "Yes" : "No") << endl;
  }
}

Error: 0

Fixed submission:

#include <bits/stdc++.h>
using namespace std;
#define int long long // <-----!!!!!!!!!!!!!!!!!!!

#define rep(i, n) for (int i = 0; i < (n); i++)
#define rep2(i, a, b) for (int i = (a); i < (b); i++)
#define rrep(i, n) for (int i = (n)-1; i >= 0; i--)
#define rrep2(i, a, b) for (int i = (a)-1; i >= b; i--)
#define all(a) (a).begin(), (a).end()
#define rall(a) (a).rbegin(), (a).rend()
#define printV(v)                                                              \\
  for (auto x : v) {                                                           \\
    cout << x << " ";                                                          \\
  }                                                                            \\
  cout << endl
#define printVS(vs)                                                            \\
  for (auto x : vs) {                                                          \\
    cout << x << endl;                                                         \\
  }
#define printVV(vv)                                                            \\
  for (auto v : vv) {                                                          \\
    for (auto &&x : v) {                                                       \\
      cout << x << " ";                                                        \\
    }                                                                          \\
    cout << endl;                                                              \\
  }
#define printP(p) cout << p.first << " " << p.second << endl
#define printVP(vp)                                                            \\
  for (auto p : vp)                                                            \\
    printP(p);

typedef long long ll;
typedef pair<int, int> Pii;
typedef tuple<int, int, int> TUPLE;
typedef vector<int> vi;
typedef vector<vi> vvi;
typedef vector<vvi> vvvi;
typedef vector<Pii> vp;
typedef vector<vector<int>> Graph;
const int inf = 1e9;
const int mod = 1e9 + 7;

const int MAX_H = 52;
const int MAX_W = 52;
bool dp[MAX_H][MAX_W][MAX_H][MAX_W];
vector<vector<string>> s;
int H, W;
vector<int> sx(2), sy(2), gx(2), gy(2);

// N, E, S, W
// kagamiawase
const int dx[2][4] = {{-1, 0, 1, 0}, {-1, 0, 1, 0}};
const int dy[2][4] = {{0, 1, 0, -1}, {0, -1, 0, 1}};

void dfs(int x0, int y0, int x1, int y1) {
  // cout << x0 << " " << y0 << " " << x1 << " " << y1 << endl;
  // if (x0 == gx[0] && y0 == gy[0] && x1 == gx[1] && y1 == gy[1]) return true;
  if (dp[x0][y0][x1][y1])
    return;

  dp[x0][y0][x1][y1] = true;

  // bool ret = false;
  rep(k, 4) {
    int nx0 = x0 + dx[0][k];
    int ny0 = y0 + dy[0][k];
    int nx1 = x1 + dx[1][k];
    int ny1 = y1 + dy[1][k];

    if (s[0][nx0][ny0] == '.' && s[1][nx1][ny1] == '.') {
      dfs(nx0, ny0, nx1, ny1);
    } else if (s[0][nx0][ny0] == '.') {
      dfs(nx0, ny0, x1, y1);
    } else if (s[1][nx1][ny1] == '.') {
      dfs(x0, y0, nx1, ny1);
    }
  }
  // return dp[x0][y0][x1][y1] = ret;
}

signed main() {
  std::ios::sync_with_stdio(false);
  std::cin.tie(0);

  while (cin >> W >> H, W) {
    H += 2;
    W += 2;

    s.clear();
    s.resize(2, vector<string>(H, string(W, '#')));
    rep2(i, 1, H - 1) {
      rep(b, 2) {
        cin >> s[b][i];
        s[b][i] = "#" + s[b][i] + "#";
      }
    }

    rep(b, 2) {
      rep(i, H) {
        rep(j, W) {
          if (s[b][i][j] == (b ? 'R' : 'L')) {
            sx[b] = i, sy[b] = j;
            s[b][i][j] = '.';
          }
          if (s[b][i][j] == '%') {
            gx[b] = i, gy[b] = j;
            s[b][i][j] = '.';
          }
        }
      }
    }

    // rep(b, 2) {
    //     printVS(s[b]);
    //     cout << endl;
    // }

    rep(x0, H) rep(y0, W) rep(x1, H) rep(y1, W) dp[x0][y0][x1][y1] = false;

    // cout << (dfs(sx[0], sy[0], sx[1], sy[1]) ? "Yes" : "No") << endl;
    dfs(sx[0], sy[0], sx[1], sy[1]);
    cout << (dp[gx[0]][gy[0]][gx[1]][gy[1]] ? "Yes" : "No") << endl;
  }
}