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

#include "bits/stdc++.h"

#define REP(i, n) for (ll i = 0; i < n; ++i)
#define RREP(i, n) for (ll i = n - 1; i >= 0; --i)
#define FOR(i, m, n) for (ll i = m; i < n; ++i)
#define RFOR(i, m, n) for (ll i = n - 1; i >= m; --i)
#define ALL(v) (v).begin(), (v).end()
#define PB(a) push_back(a)
#define UNIQUE(v) v.erase(unique(ALL(v)), v.end());
#define DUMP(v)                                                                \\
  REP(aa, (v).size()) {                                                        \\
    cout << v[a];                                                              \\
    if (a != v.size() - 1)                                                     \\
      cout << " ";                                                             \\
    else                                                                       \\
      cout << endl;                                                            \\
  }
#define INF 1000000001ll
#define MOD 1000000007ll
#define EPS 1e-9

const int dx[8] = {1, 1, 0, -1, -1, -1, 0, 1};
const int dy[8] = {0, 1, 1, 1, 0, -1, -1, -1};

using namespace std;
typedef long long ll;
typedef vector<int> vi;
typedef vector<ll> vl;
typedef vector<vi> vvi;
typedef vector<vl> vvl;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
ll max(ll a, int b) { return max(a, ll(b)); }
ll max(int a, ll b) { return max(ll(a), b); }
ll min(ll a, int b) { return min(a, ll(b)); }
ll min(int a, ll b) { return min(ll(a), b); }
///(?´????????`)(?´????????`)(?´????????`)(?´????????`)(?´????????`)(?´????????`)///
int lsx, lsy, ltx, lty, rsx, rsy, rtx, rty;
bool dfs(vector<vector<vvi>> &dp, int lx, int ly, int rx, int ry) {
  if (dp[ly][lx][ry][rx] != -1)
    return dp[ly][lx][ry][rx];
  return true;
}
int main() {
  cin.tie(0);
  ios::sync_with_stdio(false);
  int w, h;
  while (cin >> w >> h, w) {
    vector<string> l(h), r(h);
    REP(i, h) cin >> l[i] >> r[i];

    REP(i, h) {
      REP(j, w) {
        if (l[i][j] == '%') {
          ltx = j;
          lty = i;
        }
        if (l[i][j] == 'L') {
          lsx = j;
          lsy = i;
        }
      }
    }
    REP(i, h) {
      REP(j, w) {
        if (r[i][j] == '%') {
          rtx = j;
          rty = i;
        }
        if (r[i][j] == 'R') {
          rsx = j;
          rsy = i;
        }
      }
    }
    queue<pair<pii, pii>> q;
    vector<vector<vvi>> b(h, vector<vvi>(w, vvi(h, vi(w, 0))));
    q.push(pair<pii, pii>(pii(lsx, lsy), pii(rsx, rsy)));
    b[lsy][lsx][rsy][rsx] = 1;
    while (!q.empty()) {
      auto a = q.front();
      q.pop();
      int lx = a.first.first, ly = a.first.second, rx = a.second.first,
          ry = a.second.second;
      if (lx == ltx && ly == lty) {
        if (rx == rtx && ry == rty) {
          cout << "Yes" << endl;
          goto a;
        } else
          continue;
      } else if (rx == rtx && ry == rty)
        continue;

      REP(i, 4) {
        int lnx = lx + dx[i * 2], lny = ly + dy[i * 2],
            rnx = rx + dx[(i + 2) % 4 * 2], rny = ry + dy[i * 2];
        if (lnx < 0 || lnx >= w || lny < 0 || lny >= h) {
          lny = ly;
          lnx = lx;
        } else if (l[lny][lnx] == '#') {
          lny = ly;
          lnx = lx;
        }
        if (rnx < 0 || rnx >= w || rny < 0 || rny >= h) {
          rny = ry;
          rnx = rx;
        } else if (r[rny][rnx] == '#') {
          rny = ry;
          rnx = rx;
        }
        if ((lnx != lx || lny != ly || rnx != rx || rny != ry) &&
            b[lny][lnx][rny][rnx] != 1) {

          q.push(pair<pii, pii>(pii(lnx, lny), pii(rnx, rny)));
          b[lny][lnx][rny][rnx] = 1;
        }
      }
    }
    cout << "No" << endl;

  a:;
  }
}

Error: 0

Fixed submission:

#include "bits/stdc++.h"

#define REP(i, n) for (ll i = 0; i < n; ++i)
#define RREP(i, n) for (ll i = n - 1; i >= 0; --i)
#define FOR(i, m, n) for (ll i = m; i < n; ++i)
#define RFOR(i, m, n) for (ll i = n - 1; i >= m; --i)
#define ALL(v) (v).begin(), (v).end()
#define PB(a) push_back(a)
#define UNIQUE(v) v.erase(unique(ALL(v)), v.end());
#define DUMP(v)                                                                \\
  REP(aa, (v).size()) {                                                        \\
    cout << v[a];                                                              \\
    if (a != v.size() - 1)                                                     \\
      cout << " ";                                                             \\
    else                                                                       \\
      cout << endl;                                                            \\
  }
#define INF 1000000001ll
#define MOD 1000000007ll
#define EPS 1e-9

const int dx[8] = {1, 1, 0, -1, -1, -1, 0, 1};
const int dy[8] = {0, 1, 1, 1, 0, -1, -1, -1};

using namespace std;
typedef long long ll;
typedef vector<int> vi;
typedef vector<ll> vl;
typedef vector<vi> vvi;
typedef vector<vl> vvl;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
ll max(ll a, int b) { return max(a, ll(b)); }
ll max(int a, ll b) { return max(ll(a), b); }
ll min(ll a, int b) { return min(a, ll(b)); }
ll min(int a, ll b) { return min(ll(a), b); }
///(?´????????`)(?´????????`)(?´????????`)(?´????????`)(?´????????`)(?´????????`)///
int lsx, lsy, ltx, lty, rsx, rsy, rtx, rty;
bool dfs(vector<vector<vvi>> &dp, int lx, int ly, int rx, int ry) {
  if (dp[ly][lx][ry][rx] != -1)
    return dp[ly][lx][ry][rx];
  return true;
}
int main() {
  cin.tie(0);
  ios::sync_with_stdio(false);
  int w, h;
  while (cin >> w >> h, w) {
    vector<string> l(h), r(h);
    REP(i, h) cin >> l[i] >> r[i];

    REP(i, h) {
      REP(j, w) {
        if (l[i][j] == '%') {
          ltx = j;
          lty = i;
        }
        if (l[i][j] == 'L') {
          lsx = j;
          lsy = i;
        }
      }
    }
    REP(i, h) {
      REP(j, w) {
        if (r[i][j] == '%') {
          rtx = j;
          rty = i;
        }
        if (r[i][j] == 'R') {
          rsx = j;
          rsy = i;
        }
      }
    }
    vector<vector<vvi>> dp(h, vector<vvi>(w, vvi(h, vi(w, -1))));
    queue<pair<pii, pii>> q;
    vector<vector<vvi>> b(h, vector<vvi>(w, vvi(h, vi(w, 0))));
    q.push(pair<pii, pii>(pii(lsx, lsy), pii(rsx, rsy)));
    b[lsy][lsx][rsy][rsx] = 1;
    while (!q.empty()) {
      auto a = q.front();
      q.pop();
      int lx = a.first.first, ly = a.first.second, rx = a.second.first,
          ry = a.second.second;
      if (lx == ltx && ly == lty) {
        if (rx == rtx && ry == rty) {
          cout << "Yes" << endl;
          goto a;
        } else
          continue;
      }
      b[ly][lx][ry][rx] = 1;

      REP(i, 4) {
        int lnx = lx + dx[i * 2], lny = ly + dy[i * 2],
            rnx = rx + dx[(i + 2) % 4 * 2], rny = ry + dy[i * 2];
        if (lnx < 0 || lnx >= w || lny < 0 || lny >= h) {
          lny = ly;
          lnx = lx;
        } else if (l[lny][lnx] == '#') {
          lny = ly;
          lnx = lx;
        }
        if (rnx < 0 || rnx >= w || rny < 0 || rny >= h) {
          rny = ry;
          rnx = rx;
        } else if (r[rny][rnx] == '#') {
          rny = ry;
          rnx = rx;
        }
        if ((lnx != lx || lny != ly || rnx != rx || rny != ry) &&
            b[lny][lnx][rny][rnx] != 1) {

          q.push(pair<pii, pii>(pii(lnx, lny), pii(rnx, rny)));
        }
      }
    }
    cout << "No" << endl;

  a:;
  }
}