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

#include <algorithm>
#include <cmath>
#include <cstdio>
#include <iostream>
#include <set>
using namespace std;
set<int> lislis[5002];
int main() {
  int N;
  while (1) {
    cin >> N;
    if (N == 0)
      break;
    int lis[5002][2];
    for (int i = 0; i < N; i++)
      cin >> lis[i][0] >> lis[i][1];
    for (int i = 0; i < N; i++)
      lislis[lis[i][0]].insert(lis[i][1]);
    int ans = 0;
    for (int i = 0; i < N; i++) {
      for (int j = i + 1; j < N; j++) {
        int a[2], b[2], c[2], d[2];
        a[0] = lis[i][0], a[1] = lis[i][1], b[0] = lis[j][0], b[1] = lis[j][1];
        if (a[0] <= b[0] ^ a[1] <= b[1]) {
          c[0] = a[0] + fabs(a[1] - b[1]), c[1] = a[1] + fabs(a[0] - b[0]);
          d[0] = b[0] + fabs(a[1] - b[1]), d[1] = b[1] + fabs(a[0] - b[0]);
          if (0 <= c[0] && c[0] <= 5000 && 0 <= c[1] && c[1] <= 5000 &&
              0 <= d[0] && d[0] <= 5000 && 0 <= d[1] && d[1] <= 5000) {
            if (lislis[c[0]].count(c[1]) && lislis[d[0]].count(d[1])) {
              ans = max(ans, (int)(fabs(c[0] - d[0]) * fabs(c[0] - d[0]) +
                                   fabs(c[1] - d[1]) * fabs(c[1] - d[1])));
            }
          }
          c[0] = a[0] - fabs(a[1] - b[1]), c[1] = a[1] - fabs(a[0] - b[0]);
          d[0] = b[0] - fabs(a[1] - b[1]), d[1] = b[1] - fabs(a[0] - b[0]);
          if (0 <= c[0] && c[0] <= 5000 && 0 <= c[1] && c[1] <= 5000 &&
              0 <= d[0] && d[0] <= 5000 && 0 <= d[1] && d[1] <= 5000) {
            if (lislis[c[0]].count(c[1]) && lislis[d[0]].count(d[1])) {
              ans = max(ans, (int)(fabs(c[0] - d[0]) * fabs(c[0] - d[0]) +
                                   fabs(c[1] - d[1]) * fabs(c[1] - d[1])));
            }
          }
        } else {
          c[0] = a[0] + fabs(a[1] - b[1]), c[1] = a[1] - fabs(a[0] - b[0]);
          d[0] = b[0] + fabs(a[1] - b[1]), d[1] = b[1] - fabs(a[0] - b[0]);
          if (0 <= c[0] && c[0] <= 5000 && 0 <= c[1] && c[1] <= 5000 &&
              0 <= d[0] && d[0] <= 5000 && 0 <= d[1] && d[1] <= 5000) {
            if (lislis[c[0]].count(c[1]) && lislis[d[0]].count(d[1])) {
              ans = max(ans, (int)(fabs(c[0] - d[0]) * fabs(c[0] - d[0]) +
                                   fabs(c[1] - d[1]) * fabs(c[1] - d[1])));
            }
          }
          c[0] = a[0] - fabs(a[1] - b[1]), c[1] = a[1] + fabs(a[0] - b[0]);
          d[0] = b[0] - fabs(a[1] - b[1]), d[1] = b[1] + fabs(a[0] - b[0]);
          if (0 <= c[0] && c[0] <= 5000 && 0 <= c[1] && c[1] <= 5000 &&
              0 <= d[0] && d[0] <= 5000 && 0 <= d[1] && d[1] <= 5000) {
            if (lislis[c[0]].count(c[1]) && lislis[d[0]].count(d[1])) {
              ans = max(ans, (int)(fabs(c[0] - d[0]) * fabs(c[0] - d[0]) +
                                   fabs(c[1] - d[1]) * fabs(c[1] - d[1])));
            }
          }
        }
      }
    }
    cout << ans << endl;
  }
  return 0;
}

Error: 0

Fixed submission:

#include <algorithm>
#include <cmath>
#include <cstdio>
#include <iostream>
#include <set>
using namespace std;
set<int> lislis[5002];
int main() {
  int N;
  while (1) {
    cin >> N;
    if (N == 0)
      break;
    int lis[5002][2];
    for (int i = 0; i < N; i++)
      cin >> lis[i][0] >> lis[i][1];
    for (int i = 0; i < N; i++)
      lislis[lis[i][0]].insert(lis[i][1]);
    int ans = 0;
    for (int i = 0; i < N; i++) {
      for (int j = i + 1; j < N; j++) {
        int a[2], b[2], c[2], d[2];
        a[0] = lis[i][0], a[1] = lis[i][1], b[0] = lis[j][0], b[1] = lis[j][1];
        if (a[0] <= b[0] ^ a[1] <= b[1]) {
          c[0] = a[0] + fabs(a[1] - b[1]), c[1] = a[1] + fabs(a[0] - b[0]);
          d[0] = b[0] + fabs(a[1] - b[1]), d[1] = b[1] + fabs(a[0] - b[0]);
          if (0 <= c[0] && 0 <= c[1] && 0 <= d[0] && 0 <= d[1]) {
            if (lislis[c[0]].count(c[1]) && lislis[d[0]].count(d[1])) {
              ans = max(ans, (int)(fabs(c[0] - d[0]) * fabs(c[0] - d[0]) +
                                   fabs(c[1] - d[1]) * fabs(c[1] - d[1])));
            }
          }
          c[0] = a[0] - fabs(a[1] - b[1]), c[1] = a[1] - fabs(a[0] - b[0]);
          d[0] = b[0] - fabs(a[1] - b[1]), d[1] = b[1] - fabs(a[0] - b[0]);
          if (0 <= c[0] && 0 <= c[1] && 0 <= d[0] && 0 <= d[1]) {
            if (lislis[c[0]].count(c[1]) && lislis[d[0]].count(d[1])) {
              ans = max(ans, (int)(fabs(c[0] - d[0]) * fabs(c[0] - d[0]) +
                                   fabs(c[1] - d[1]) * fabs(c[1] - d[1])));
            }
          }
        } else {
          c[0] = a[0] + fabs(a[1] - b[1]), c[1] = a[1] - fabs(a[0] - b[0]);
          d[0] = b[0] + fabs(a[1] - b[1]), d[1] = b[1] - fabs(a[0] - b[0]);
          if (0 <= c[0] && 0 <= c[1] && 0 <= d[0] && 0 <= d[1]) {
            if (lislis[c[0]].count(c[1]) && lislis[d[0]].count(d[1])) {
              ans = max(ans, (int)(fabs(c[0] - d[0]) * fabs(c[0] - d[0]) +
                                   fabs(c[1] - d[1]) * fabs(c[1] - d[1])));
            }
          }
          c[0] = a[0] - fabs(a[1] - b[1]), c[1] = a[1] + fabs(a[0] - b[0]);
          d[0] = b[0] - fabs(a[1] - b[1]), d[1] = b[1] + fabs(a[0] - b[0]);
          if (0 <= c[0] && 0 <= c[1] && 0 <= d[0] && 0 <= d[1]) {
            if (lislis[c[0]].count(c[1]) && lislis[d[0]].count(d[1])) {
              ans = max(ans, (int)(fabs(c[0] - d[0]) * fabs(c[0] - d[0]) +
                                   fabs(c[1] - d[1]) * fabs(c[1] - d[1])));
            }
          }
        }
      }
    }
    cout << ans << endl;
  }
  return 0;
}