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

#include <algorithm>
#include <cctype>
#include <climits>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <ctime>
#include <fstream>
#include <functional>
#include <iostream>
#include <map>
#include <queue>
#include <set>
#include <sstream>
#include <stack>
#include <string>
#include <utility>
#include <vector>
using namespace std;
inline int toInt(string s) {
  int v;
  istringstream sin(s);
  sin >> v;
  return v;
}
template <class T> inline string toStr(T x) {
  ostringstream sout;
  sout << x;
  return sout.str();
}
typedef vector<int> vi;
typedef vector<vi> vvi;
typedef vector<string> vs;
typedef pair<int, int> pii;
typedef long long ll;
#define ALL(a) (a).begin(), (a).end()
#define RALL(a) (a).rbegin(), (a).rend()
#define FOR(i, a, b) for (int i = (a); i <= (b); ++i)
#define REP(i, n) FOR(i, 0, (n)-1)
const double EPS = 1e-10;
const double PI = acos(-1.0);
const int INF = INT_MAX / 10;

int main() {
  int n, l;
  while (cin >> n >> l, n) {
    vector<pii> ants(n);
    REP(i, n) {
      char d;
      cin >> d >> ants[i].second;
      if (d == 'R') {
        ants[i].first = 1;
      } else {
        ants[i].first = -1;
      }
    }

    int left = n, sec = 0, ans = -1;
    while (true) {
      sec++;
      ans = -1;
      REP(i, n) { ants[i].second += ants[i].first; }

      REP(i, n) {
        if (ants[i].first != 0) {
          if (ants[i].second == 0) {
            ans = i + 1;
            ants[i].first = 0;
            left--;
          } else if (ants[i].second == l) {
            if (ans == -1) {
              ans = i + 1;
            }
            ants[i].first = 0;
            left--;
          }
        }
      }

      if (n != 1) {
        REP(i, n) {
          FOR(j, i, n - 1) {
            if (ants[i].second == ants[j].second && ants[i].first != 0) {
              ants[i].first *= -1;
              ants[j].first *= -1;
            }
          }
        }
      }

      if (left == 0) {
        cout << sec << " " << ans << endl;
        break;
      }
    }
  }

  return 0;
}

Error: 0
sec : 1
1 : 1 2
2 : -1 1
3 : -1 4
sec : 2
1 : -1 3
2 : 0 0
3 : 1 3
sec : 3
1 : -1 2
2 : 0 0
3 : 1 4
sec : 4
1 : -1 1
2 : 0 0
3 : 1 5
sec : 1
1 : 1 2
sec : 2
1 : 1 3
sec : 3
1 : 1 4
sec : 4
1 : 1 5
sec : 5
1 : 1 6
sec : 6
1 : 1 7
sec : 7
1 : 1 8
sec : 8
1 : 1 9
sec : 1
1 : -1 6
2 : 1 6
sec : 2
1 : -1 5
2 : 1 7
sec : 3
1 : -1 4
2 : 1 8
sec : 4
1 : -1 3
2 : 1 9
sec : 5
1 : -1 2
2 : 0 10
sec : 6
1 : -1 1
2 : 0 10
sec : 1
1 : 1 4
2 : -1 7
sec : 2
1 : 1 5
2 : -1 6
sec : 3
1 : 1 6
2 : -1 5
sec : 4
1 : 1 7
2 : -1 4
sec : 5
1 : 1 8
2 : -1 3
sec : 6
1 : 1 9
2 : -1 2
sec : 7
1 : 0 10
2 : -1 1
sec : 1
1 : 1 2
2 : -1 97
sec : 2
1 : 1 3
2 : -1 96
sec : 3
1 : 1 4
2 : -1 95
sec : 4
1 : 1 5
2 : -1 94
sec : 5
1 : 1 6
2 : -1 93
sec : 6
1 : 1 7
2 : -1 92
sec : 7
1 : 1 8
2 : -1 91
sec : 8
1 : 1 9
2 : -1 90
sec : 9
1 : 1 10
2 : -1 89
sec : 10
1 : 1 11
2 : -1 88
sec : 11
1 : 1 12
2 : -1 87
sec : 12
1 : 1 13
2 : -1 86
sec : 13
1 : 1 14
2 : -1 85
sec : 14
1 : 1 15
2 : -1 84
sec : 15
1 : 1 16
2 : -1 83
sec : 16
1 : 1 17
2 : -1 82
sec : 17
1 : 1 18
2 : -1 81
sec : 18
1 : 1 19
2 : -1 80
sec : 19
1 : 1 20
2 : -1 79
sec : 20
1 : 1 21
2 : -1 78
sec : 21
1 : 1 22
2 : -1 77
sec : 22
1 : 1 23
2 : -1 76
sec : 23
1 : 1 24
2 : -1 75
sec : 24
1 : 1 25
2 : -1 74
sec : 25
1 : 1 26
2 : -1 73
sec : 26
1 : 1 27
2 : -1 72
sec : 27
1 : 1 28
2 : -1 71
sec : 28
1 : 1 29
2 : -1 70
sec : 29
1 : 1 30
2 : -1 69
sec : 30
1 : 1 31
2 : -1 68
sec : 31
1 : 1 32
2 : -1 67
sec : 32
1 : 1 33
2 : -1 66
sec : 33
1 : 1 34
2 : -1 65
sec : 34
1 : 1 35
2 : -1 64
sec : 35
1 : 1 36
2 : -1 63
sec : 36
1 : 1 37
2 : -1 62
sec : 37
1 : 1 38
2 : -1 61
sec : 38
1 : 1 39
2 : -1 60
sec : 39
1 : 1 40
2 : -1 59
sec : 40
1 : 1 41
2 : -1 58
sec : 41
1 : 1 42
2 : -1 57
sec : 42
1 : 1 43
2 : -1 56
sec : 43
1 : 1 44
2 : -1 55
sec : 44
1 : 1 45
2 : -1 54
sec : 45
1 : 1 46
2 : -1 53
sec : 46
1 : 1 47
2 : -1 52
sec : 47
1 : 1 48
2 : -1 51
sec : 48
1 : 1 49
2 : -1 50
sec : 49
1 : 1 50
2 : -1 49
sec : 50
1 : 1 51
2 : -1 48
sec : 51
1 : 1 52
2 : -1 47
sec : 52
1 : 1 53
2 : -1 46
sec : 53
1 : 1 54
2 : -1 45
sec : 54
1 : 1 55
2 : -1 44
sec : 55
1 : 1 56
2 : -1 43
sec : 56
1 : 1 57
2 : -1 42
sec : 57
1 : 1 58
2 : -1 41
sec : 58
1 : 1 59
2 : -1 40
sec : 59
1 : 1 60
2 : -1 39
sec : 60
1 : 1 61
2 : -1 38
sec : 61
1 : 1 62
2 : -1 37
sec : 62
1 : 1 63
2 : -1 36
sec : 63
1 : 1 64
2 : -1 35
sec : 64
1 : 1 65
2 : -1 34
sec : 65
1 : 1 66
2 : -1 33
sec : 66
1 : 1 67
2 : -1 32
sec : 67
1 : 1 68
2 : -1 31
sec : 68
1 : 1 69
2 : -1 30
sec : 69
1 : 1 70
2 : -1 29
sec : 70
1 : 1 71
2 : -1 28
sec : 71
1 : 1 72
2 : -1 27
sec : 72
1 : 1 73
2 : -1 26
sec : 73
1 : 1 74
2 : -1 25
sec : 74
1 : 1 75
2 : -1 24
sec : 75
1 : 1 76
2 : -1 23
sec : 76
1 : 1 77
2 : -1 22
sec : 77
1 : 1 78
2 : -1 21
sec : 78
1 : 1 79
2 : -1 20
sec : 79
1 : 1 80
2 : -1 19
sec : 80
1 : 1 81
2 : -1 18
sec : 81
1 : 1 82
2 : -1 17
sec : 82
1 : 1 83
2 : -1 16
sec : 83
1 : 1 84
2 : -1 15
sec : 84
1 : 1 85
2 : -1 14
sec : 85
1 : 1 86
2 : -1 13
sec : 86
1 : 1 87
2 : -1 12
sec : 87
1 : 1 88
2 : -1 11
sec : 88
1 : 1 89
2 : -1 10
sec : 89
1 : 1 90
2 : -1 9
sec : 90
1 : 1 91
2 : -1 8
sec : 91
1 : 1 92
2 : -1 7
sec : 92
1 : 1 93
2 : -1 6
sec : 93
1 : 1 94
2 : -1 5
sec : 94
1 : 1 95
2 : -1 4
sec : 95
1 : 1 96
2 : -1 3
sec : 96
1 : 1 97
2 : -1 2
sec : 97
1 : 1 98
2 : -1 1
sec : 1
1 : 0 0
2 : 1 3
3 : -1 7
4 : 0 10
sec : 2
1 : 0 0
2 : 1 4
3 : -1 6
4 : 0 10
sec : 3
1 : 0 0
2 : -1 5
3 : 1 5
4 : 0 10
sec : 4
1 : 0 0
2 : -1 4
3 : 1 6
4 : 0 10
sec : 5
1 : 0 0
2 : -1 3
3 : 1 7
4 : 0 10
sec : 6
1 : 0 0
2 : -1 2
3 : 1 8
4 : 0 10
sec : 7
1 : 0 0
2 : -1 1
3 : 1 9
4 : 0 10
sec : 1
1 : -1 3
2 : 1 4
3 : 1 3
4 : -1 7
5 : -1 6
6 : 1 7
sec : 2
1 : -1 2
2 : -1 5
3 : 1 4
4 : -1 6
5 : 1 5
6 : 1 8
sec : 3
1 : -1 1
2 : -1 4
3 : -1 5
4 : 1 5
5 : 1 6
6 : 1 9
sec : 4
1 : 0 0
2 : -1 3
3 : -1 4
4 : 1 6
5 : 1 7
6 : 0 10
sec : 5
1 : 0 0
2 : -1 2
3 : -1 3
4 : 1 7
5 : 1 8
6 : 0 10
sec : 6
1 : 0 0
2 : -1 1
3 : -1 2
4 : 1 8
5 : 1 9
6 : 0 10
sec : 7
1 : 0 0
2 : 0 0
3 : -1 1
4 : 1 9
5 : 0 10
6 : 0 10


Fixed submission:

#include <algorithm>
#include <cctype>
#include <climits>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <ctime>
#include <fstream>
#include <functional>
#include <iostream>
#include <map>
#include <queue>
#include <set>
#include <sstream>
#include <stack>
#include <string>
#include <utility>
#include <vector>
using namespace std;
inline int toInt(string s) {
  int v;
  istringstream sin(s);
  sin >> v;
  return v;
}
template <class T> inline string toStr(T x) {
  ostringstream sout;
  sout << x;
  return sout.str();
}
typedef vector<int> vi;
typedef vector<vi> vvi;
typedef vector<string> vs;
typedef pair<int, int> pii;
typedef long long ll;
#define ALL(a) (a).begin(), (a).end()
#define RALL(a) (a).rbegin(), (a).rend()
#define FOR(i, a, b) for (int i = (a); i <= (b); ++i)
#define REP(i, n) FOR(i, 0, (n)-1)
const double EPS = 1e-10;
const double PI = acos(-1.0);
const int INF = INT_MAX / 10;

int main() {
  int n, l;
  while (cin >> n >> l, n) {
    vector<pii> ants(n);
    REP(i, n) {
      char d;
      cin >> d >> ants[i].second;
      if (d == 'R') {
        ants[i].first = 1;
      } else {
        ants[i].first = -1;
      }
    }

    int left = n, sec = 0, ans = -1;
    while (true) {
      sec++;
      ans = -1;
      REP(i, n) { ants[i].second += ants[i].first; }

      REP(i, n) {
        if (ants[i].first != 0) {
          if (ants[i].second == 0) {
            ans = i + 1;
            ants[i].first = 0;
            left--;
          } else if (ants[i].second == l) {
            if (ans == -1) {
              ans = i + 1;
            }
            ants[i].first = 0;
            left--;
          }
        }
      }

      if (n != 1) {
        REP(i, n) {
          FOR(j, i, n - 1) {
            if (ants[i].second == ants[j].second && ants[i].first != 0) {
              ants[i].first *= -1;
              ants[j].first *= -1;
            }
          }
        }
      }

      if (left == 0) {
        cout << sec << " " << ans << endl;
        break;
      }

      cerr << "sec : " << sec << endl;
      REP(i, n) {
        cerr << i + 1 << " : " << ants[i].first << " " << ants[i].second
             << endl;
      }
    }
  }

  return 0;
}