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

#pragma GCC target("avx")
#pragma GCC optimize("O3")
#pragma GCC optimize("unroll-loops")
// #pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
#define _USE_MATH_DEFINES
#include <algorithm>
#include <bitset>
#include <cassert>
#include <climits>
#include <cmath>
#include <complex>
#include <cstdio>
#include <cstring>
#include <fstream>
#include <functional>
#include <iomanip>
#include <iostream>
#include <list>
#include <map>
#include <numeric>
#include <queue>
#include <random>
#include <set>
#include <stack>
#include <string>
#include <time.h>
#include <tuple>
#include <unordered_map>
#include <vector>
using namespace std;
using ll = long long;
using ld = long double;
#define int long long
#define all(a) (a).begin(), (a).end()
#define fs first
#define sc second
#define xx first
#define yy second.first
#define zz second.second
#define H pair<int, int>
#define P pair<int, pair<int, int>>
#define Q(i, j, k) mkp(i, mkp(j, k))
#define rng(i, s, n) for (int i = (s); i < (n); i++)
#define rep(i, n) rng(i, 0, (n))
#define mkp make_pair
#define vec vector
#define pb emplace_back
#define crdcomp(b)                                                             \\
  sort(all((b)));                                                              \\
  (b).erase(unique(all((b))), (b).end())
#define getidx(b, i) lower_bound(all(b), (i)) - b.begin()
#define ssp(i, n) (i == (int)(n)-1 ? "\\n" : " ")
#define ctoi(c) (int)(c - '0')
#define itoc(c) (char)(c + '0')
#define pp(x, y) pb(H{x, y})
#define ppp(x, y, z) pb(Q(x, y, z))
#define cyes printf("Yes\\n")
#define cno printf("No\\n")
#define cdf(n)                                                                 \\
  int quetimes_ = (n);                                                         \\
  rep(qq123_, quetimes_)
#define gcj printf("Case #%lld: ", qq123_ + 1)
#define readv(a, n)                                                            \\
  a.resize(n, 0);                                                              \\
  rep(i, (n)) a[i] = read()
// #define endl "\\n"
constexpr int mod = 1e9 + 7;
constexpr int Mod = 998244353;
constexpr int MXN = 500000 + 100;
constexpr ld EPS = 1e-10;
constexpr ll inf = 3 * 1e18;
constexpr int Inf = 15 * 1e8;
const vec<int> dx{-1, 1, 0, 0}, dy{0, 0, -1, 1};
template <class T> bool chmax(T &a, const T &b) {
  if (a < b) {
    a = b;
    return 1;
  }
  return 0;
}
template <class T> bool chmin(T &a, const T &b) {
  if (b < a) {
    a = b;
    return 1;
  }
  return 0;
}
ll read() {
  ll u, k = scanf("%lld", &u);
  return u;
}
string reads() {
  string s;
  cin >> s;
  return s;
}
H readh(bool g = 0) {
  H u;
  int k = scanf("%lld %lld", &u.fs, &u.sc);
  if (g)
    u.fs--, u.sc--;
  return u;
}
bool inarea(H t, int h, int w) {
  return 0 <= t.fs && t.fs < h && 0 <= t.sc && t.sc < w;
}
ll gcd(ll i, ll j) { return j ? gcd(j, i % j) : i; }
ll mod_pow(ll x, ll n, ll p = mod) {
  ll res = 1;
  x %= p;
  while (n > 0) {
    if (n & 1)
      res = res * x % p;
    x = x * x % p;
    n >>= 1;
  }
  return res;
} // x^n%p
ll bitcount(ll x) {
  int sum = 0;
  for (int i = 0; i < 60; i++)
    if ((1ll << i) & x)
      sum++;
  return sum;
}
constexpr int fn_ = 5000005;
ll fact_[fn_], comp_[fn_];
ll comb(ll x, ll y, ll m) {
  if (!fact_[0]) {
    fact_[0] = 1;
    comp_[0] = 1;
    for (int i = 1; i < fn_; i++)
      fact_[i] = fact_[i - 1] * i % m;
    comp_[fn_ - 1] = mod_pow(fact_[fn_ - 1], m - 2, m);
    for (int i = fn_ - 2; i > 0; i--)
      comp_[i] = comp_[i + 1] * (i + 1) % m;
  }
  if (x < y)
    return 0;
  return fact_[x] * comp_[x - y] % m * comp_[y] % m;
}
//--------------------------------------------------------------
bool check(vec<H> v) {
  int h = 0;
  for (auto g : v) {
    int b = h + g.fs;
    if (b < 0)
      return 0;
    h += g.sc;
  }
  return 1;
}
signed main() {
  int n = read();
  vec<H> ls, rs;
  int total = 0;
  rep(i, n) {
    string s;
    cin >> s;
    int sum = 0, res = 0;
    rep(i, s.size()) {
      if (s[i] == '(')
        sum++;
      else
        sum--;
      chmin(res, sum);
    }
    if (sum > 0)
      ls.pb(res, sum);
    else
      rs.pb(res - sum, -sum);
    total += sum;
  }
  sort(ls.rbegin(), ls.rend());
  sort(rs.rbegin(), rs.rend());
  if (check(ls) && check(rs) && total == 0)
    cyes;
  else
    cno;
}

Error: 0

Fixed submission:

#pragma GCC target("avx")
#pragma GCC optimize("O3")
#pragma GCC optimize("unroll-loops")
// #pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
#define _USE_MATH_DEFINES
#include <algorithm>
#include <bitset>
#include <cassert>
#include <climits>
#include <cmath>
#include <complex>
#include <cstdio>
#include <cstring>
#include <fstream>
#include <functional>
#include <iomanip>
#include <iostream>
#include <list>
#include <map>
#include <numeric>
#include <queue>
#include <random>
#include <set>
#include <stack>
#include <string>
#include <time.h>
#include <tuple>
#include <unordered_map>
#include <vector>
using namespace std;
using ll = long long;
using ld = long double;
#define int long long
#define all(a) (a).begin(), (a).end()
#define fs first
#define sc second
#define xx first
#define yy second.first
#define zz second.second
#define H pair<int, int>
#define P pair<int, pair<int, int>>
#define Q(i, j, k) mkp(i, mkp(j, k))
#define rng(i, s, n) for (int i = (s); i < (n); i++)
#define rep(i, n) rng(i, 0, (n))
#define mkp make_pair
#define vec vector
#define pb emplace_back
#define crdcomp(b)                                                             \\
  sort(all((b)));                                                              \\
  (b).erase(unique(all((b))), (b).end())
#define getidx(b, i) lower_bound(all(b), (i)) - b.begin()
#define ssp(i, n) (i == (int)(n)-1 ? "\\n" : " ")
#define ctoi(c) (int)(c - '0')
#define itoc(c) (char)(c + '0')
#define pp(x, y) pb(H{x, y})
#define ppp(x, y, z) pb(Q(x, y, z))
#define cyes printf("Yes\\n")
#define cno printf("No\\n")
#define cdf(n)                                                                 \\
  int quetimes_ = (n);                                                         \\
  rep(qq123_, quetimes_)
#define gcj printf("Case #%lld: ", qq123_ + 1)
#define readv(a, n)                                                            \\
  a.resize(n, 0);                                                              \\
  rep(i, (n)) a[i] = read()
// #define endl "\\n"
constexpr int mod = 1e9 + 7;
constexpr int Mod = 998244353;
constexpr int MXN = 500000 + 100;
constexpr ld EPS = 1e-10;
constexpr ll inf = 3 * 1e18;
constexpr int Inf = 15 * 1e8;
const vec<int> dx{-1, 1, 0, 0}, dy{0, 0, -1, 1};
template <class T> bool chmax(T &a, const T &b) {
  if (a < b) {
    a = b;
    return 1;
  }
  return 0;
}
template <class T> bool chmin(T &a, const T &b) {
  if (b < a) {
    a = b;
    return 1;
  }
  return 0;
}
ll read() {
  ll u, k = scanf("%lld", &u);
  return u;
}
string reads() {
  string s;
  cin >> s;
  return s;
}
H readh(bool g = 0) {
  H u;
  int k = scanf("%lld %lld", &u.fs, &u.sc);
  if (g)
    u.fs--, u.sc--;
  return u;
}
bool inarea(H t, int h, int w) {
  return 0 <= t.fs && t.fs < h && 0 <= t.sc && t.sc < w;
}
ll gcd(ll i, ll j) { return j ? gcd(j, i % j) : i; }
ll mod_pow(ll x, ll n, ll p = mod) {
  ll res = 1;
  x %= p;
  while (n > 0) {
    if (n & 1)
      res = res * x % p;
    x = x * x % p;
    n >>= 1;
  }
  return res;
} // x^n%p
ll bitcount(ll x) {
  int sum = 0;
  for (int i = 0; i < 60; i++)
    if ((1ll << i) & x)
      sum++;
  return sum;
}
constexpr int fn_ = 5000005;
ll fact_[fn_], comp_[fn_];
ll comb(ll x, ll y, ll m) {
  if (!fact_[0]) {
    fact_[0] = 1;
    comp_[0] = 1;
    for (int i = 1; i < fn_; i++)
      fact_[i] = fact_[i - 1] * i % m;
    comp_[fn_ - 1] = mod_pow(fact_[fn_ - 1], m - 2, m);
    for (int i = fn_ - 2; i > 0; i--)
      comp_[i] = comp_[i + 1] * (i + 1) % m;
  }
  if (x < y)
    return 0;
  return fact_[x] * comp_[x - y] % m * comp_[y] % m;
}
//--------------------------------------------------------------
signed main() {
  int n = read();
  vec<pair<string, H>> v;
  rep(i, n) {
    string s;
    cin >> s;
    vec<int> b(s.size(), 0);
    if (s[0] == '(')
      b[0] = 1;
    else
      b[0] = -1;
    rng(i, 1, s.size()) {
      if (s[i] == '(')
        b[i] = b[i - 1] + 1;
      else
        b[i] = b[i - 1] - 1;
    }
    int rrr = b[0];
    rep(i, s.size()) chmin(rrr, b[i]);
    v.pb(s, H{rrr, b[s.size() - 1]});
  }
  sort(all(v), [](auto a, auto b) {
    if (a.yy >= 0)
      return true;
    if (b.yy >= 0)
      return false;
    return a.zz > b.zz;
  });
  string h = "";
  rep(i, v.size()) h += v[i].fs;
  int sum = 0;
  rep(i, h.size()) {
    if (h[i] == '(')
      sum++;
    else
      sum--;
    if (sum < 0) {
      cno;
      return 0;
    }
  }
  if (!sum)
    cyes;
  else
    cno;
}