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

#include <bits/stdc++.h>
#define FOR(i, a, b) for (int i = (a); i < (b); i++)
#define RFOR(i, a, b) for (int i = (b)-1; i >= (a); i--)
#define REP(i, n) for (int i = 0; i < (n); i++)
#define RREP(i, n) for (int i = n - 1; i >= 0; i--)

#define PB push_back
#define MP make_pair
#define ALL(a) (a).begin(), (a).end()
#define RALL(a) (a).rbegin(), (a).rend()
#define CLR(a) memset(a, 0, sizeof(a))
#define SET(a, c) memset(a, c, sizeof(a))

#define DEBUG(x)                                                               \\
  cout << "#x"                                                                 \\
       << ": " << x << endl

using namespace std;

typedef long long int ll;
typedef vector<int> vi;
typedef vector<ll> vl;

const ll INF = INT_MAX / 3;
const ll MOD = 1000000007;
const double EPS = 1e-14;
const int dx[] = {1, 0, -1, 0}, dy[] = {0, 1, 0, -1};

int main() {
  while (true) {
    int n;
    cin >> n;
    if (n == 0)
      break;
    bool flg = false;
    vl v(n);
    REP(i, n) cin >> v[i];
    v.PB(20000000000000000);
    vector<string> ans;
    int h = v[0];
    int t = v[0];
    FOR(i, 1, n + 1) {
      if (v[i] - t == 1) {
        t = v[i];
      } else {
        if (h == t)
          ans.PB(to_string(h));
        else
          ans.PB(to_string(h) + "-" + to_string(t));
        h = v[i];
        t = v[i];
      }
    }
    cout << ans[0];
    FOR(i, 1, ans.size()) { cout << " " << ans[i]; }
    printf("\\n");
  }

  return 0;
}

Error: 0

Fixed submission:

#include <bits/stdc++.h>
#define FOR(i, a, b) for (int i = (a); i < (b); i++)
#define RFOR(i, a, b) for (int i = (b)-1; i >= (a); i--)
#define REP(i, n) for (int i = 0; i < (n); i++)
#define RREP(i, n) for (int i = n - 1; i >= 0; i--)

#define PB push_back
#define MP make_pair
#define ALL(a) (a).begin(), (a).end()
#define RALL(a) (a).rbegin(), (a).rend()
#define CLR(a) memset(a, 0, sizeof(a))
#define SET(a, c) memset(a, c, sizeof(a))

#define DEBUG(x)                                                               \\
  cout << "#x"                                                                 \\
       << ": " << x << endl

using namespace std;

typedef long long int ll;
typedef vector<int> vi;
typedef vector<ll> vl;

const ll INF = INT_MAX / 3;
const ll MOD = 1000000007;
const double EPS = 1e-14;
const int dx[] = {1, 0, -1, 0}, dy[] = {0, 1, 0, -1};

int main() {
  while (true) {
    int n;
    cin >> n;
    if (n == 0)
      break;
    bool flg = false;
    vi v(n);
    REP(i, n) cin >> v[i];
    vector<string> ans;
    int h = v[0];
    int t = v[0];
    FOR(i, 1, n) {
      if (v[i] - t == 1) {
        t = v[i];
        if (i == n - 1) {
          ans.PB(to_string(h) + "-" + to_string(v[i]));
        }
      } else {
        if (i == n - 1) {
          ans.PB(to_string(h) + "-" + to_string(t));
          ans.PB(to_string(v[i]));
        } else {
          ans.PB(to_string(h) + "-" + to_string(t));
        }
        h = v[i];
        t = v[i];
      }
    }
    if (ans[0][0] != ans[0][2]) {
      cout << ans[0];
    } else {
      cout << ans[0][0];
    }
    FOR(i, 1, ans.size()) {
      if (ans[i][0] != ans[i][2]) {
        cout << " " << ans[i];
      } else {
        cout << " " << ans[i][0];
      }
    }
    printf("\\n");
  }

  return 0;
}