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

// https://atcoder.jp/contests/abc167/tasks/abc167_f
// 初期文字列から()をすべて削除し、すべて))))(((という文字列にする
// )の数でソート 同じ場合は(が多い順
// )が少ない順につなげて()を消してく
#include <bits/stdc++.h>
using namespace std;
#define rep(i, n) for (int i = 0; i < (int)(n); i++)
#define is_in(i, s) (s.find(i) != s.end())
#define all(x) (x).begin(), (x).end()
#define outl(x) cout << x << endl
#define outsp(x) cout << x << " "
typedef long long ll;
typedef pair<int, int> P;

#define MAX_N 1000005

// bool comp(const P& p1,const P& p2){
// 	if(p1.first == p2.first){
// 		return p1.second > p2.second;
// 	}
// 	return p1.first < p2.first;
// }

int main() {
  int n;
  vector<P> vecl;
  vector<P> vecr;
  cin >> n;
  int eq_max = 0;

  string s;
  rep(i, n) {
    int rn = 0, ln = 0;
    cin >> s;
    rep(j, s.size()) {
      if (s[j] == ')') {
        if (ln > 0)
          ln--;
        else
          rn++;
      } else {
        ln++;
      }
    }
    if (rn == 0 && ln == 0)
      continue;
    else if (ln > rn)
      vecl.push_back(P(rn, ln));
    else if (ln == rn)
      eq_max = max(eq_max, ln);
    else
      vecr.push_back(P(ln, rn));
  }
  // sort(all(vecl),comp);
  sort(all(vecl));
  // rep(i,vec.size()){outsp(vec[i].first);outl(vec[i].second);}
  int rcum = 0;
  rep(i, vecl.size()) {
    rcum -= vecl[i].first;
    if (rcum < 0) {
      outl("No");
      return 0;
    }
    rcum += vecl[i].second;
  }

  sort(all(vecr));
  // rep(i,vec.size()){outsp(vec[i].first);outl(vec[i].second);}
  int lcum = 0;
  rep(i, vecr.size()) {
    lcum -= vecr[i].first;
    if (lcum < 0) {
      outl("No");
      return 0;
    }
    lcum += vecr[i].second;
  }

  if (rcum >= eq_max && rcum == lcum) {
    outl("Yes");
  } else {
    outl("No");
  }

  return 0;
}


Error: 0

Fixed submission:

// https://atcoder.jp/contests/abc167/tasks/abc167_f
// 初期文字列から()をすべて削除し、すべて))))(((という文字列にする
// )の数でソート 同じ場合は(が多い順
// )が少ない順につなげて()を消してく
#include <bits/stdc++.h>
using namespace std;
#define rep(i, n) for (int i = 0; i < (int)(n); i++)
#define is_in(i, s) (s.find(i) != s.end())
#define all(x) (x).begin(), (x).end()
#define outl(x) cout << x << endl
#define outsp(x) cout << x << " "
typedef long long ll;
typedef pair<int, int> P;

#define MAX_N 1000005

// bool comp(const P& p1,const P& p2){
// 	if(p1.first == p2.first){
// 		return p1.second > p2.second;
// 	}
// 	return p1.first < p2.first;
// }

int main() {
  int n;
  vector<P> vecl;
  vector<P> vecr;
  cin >> n;
  int eq_max = 0;

  string s;
  rep(i, n) {
    int rn = 0, ln = 0;
    cin >> s;
    rep(j, s.size()) {
      if (s[j] == ')') {
        if (ln > 0)
          ln--;
        else
          rn++;
      } else {
        ln++;
      }
    }
    if (rn == 0 && ln == 0)
      continue;
    else if (ln > rn)
      vecl.push_back(P(rn, ln));
    else if (ln == rn)
      eq_max = max(eq_max, ln);
    else
      vecr.push_back(P(ln, rn));
  }
  // sort(all(vecl),comp);
  sort(all(vecl));
  // rep(i,vec.size()){outsp(vec[i].first);outl(vec[i].second);}
  int rcum = 0;
  rep(i, vecl.size()) {
    rcum -= vecl[i].first;
    if (rcum < 0) {
      outl("No");
      return 1;
    }
    rcum += vecl[i].second;
  }

  sort(all(vecr));
  // rep(i,vec.size()){outsp(vec[i].first);outl(vec[i].second);}
  int lcum = 0;
  rep(i, vecr.size()) {
    lcum -= vecr[i].first;
    if (lcum < 0) {
      outl("No");
      return 1;
    }
    lcum += vecr[i].second;
  }

  if (rcum >= eq_max && rcum == lcum) {
    outl("Yes");
  } else {
    outl("No");
  }

  return 0;
}