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

#include <bits/stdc++.h>

using namespace std;
typedef long long ll;
typedef long double ld;

struct str {
  int a = 0, b = 0;
  string s;
};

int main() {
#ifdef LOCAL
  freopen("input.txt", "r", stdin);
  freopen("output.txt", "w", stdout);
#endif // LOCAL
  ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);

  int n;
  cin >> n;

  str a[n];

  for (int i = 0; i < n; ++i) {
    cin >> a[i].s;
  }

  for (int i = 0; i < n; ++i) {
    int x = 0;

    for (int j = 0; j < a[i].s.size(); ++j) {
      if (a[i].s[j] == '(')
        x++;
      else {
        if (x == 0)
          a[i].a++;
        else
          x--;
      }
    }
    a[i].b = x;

    // cout << a[i].a << " " << a[i].b << endl;
  }

  sort(a, a + n, [](str &a, str &b) { return a.a < b.a; });

  int x = 0;
  multiset<pair<int, string>> s;

  int j = 0;
  string ss;
  while (true) {
    while (j < n && a[j].a <= x)
      s.insert({-a[j].a + a[j].b, a[j].s}), j++;

    if (s.empty())
      break;

    x += s.rbegin()->first;
    ss += s.rbegin()->second;
    // cout << x << endl;
    if (x < 0) {
      cout << "No";
      return 0;
    }
    auto it = s.end();
    it--;
    s.erase(it);
  }

  bool f1 = j == n && x == 0;

  for (int i = 0; i < n; ++i) {
    swap(a[i].a, a[i].b);
  }
  sort(a, a + n, [](str &a, str &b) { return a.a < b.a; });

  x = 0;
  s.clear();
  j = 0;
  while (true) {
    while (j < n && a[j].a <= x)
      s.insert({-a[j].a + a[j].b, a[j].s}), j++;

    if (s.empty())
      break;

    x += s.rbegin()->first;
    ss += s.rbegin()->second;
    // cout << x << endl;
    if (x < 0) {
      cout << "No";
      return 0;
    }
    auto it = s.end();
    it--;
    s.erase(it);
  }

  // x = 0;
  // for (int i = 0; i < ss.size(); ++i) {
  // 	if (ss[i] == '(')
  // 		x++;
  // 	else {
  // 		if (x == 0) {
  // 			cout << "No";
  // 			return 0;
  // 		} else {
  // 			x--;
  // 		}
  // 	}
  // }

  // cout << ss;
  if (f1 && j == n && x == 0) {
    cout << "Yes";
  } else {
    cout << "No";
  }
  return 0;
}


Error: 255

Fixed submission:

#include <bits/stdc++.h>

using namespace std;
typedef long long ll;
typedef long double ld;

struct str {
  int a = 0, b = 0;
  string s;
};

int main() {
#ifdef LOCAL
  freopen("input.txt", "r", stdin);
  freopen("output.txt", "w", stdout);
#endif // LOCAL
  ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);

  int n;
  cin >> n;

  str a[n];

  for (int i = 0; i < n; ++i) {
    cin >> a[i].s;
  }

  for (int i = 0; i < n; ++i) {
    int x = 0;

    for (int j = 0; j < a[i].s.size(); ++j) {
      if (a[i].s[j] == '(')
        x++;
      else {
        if (x == 0)
          a[i].a++;
        else
          x--;
      }
    }
    a[i].b = x;

    // cout << a[i].a << " " << a[i].b << endl;
  }

  sort(a, a + n, [](str &a, str &b) { return a.a < b.a; });

  int x = 0;
  multiset<pair<int, string>> s;

  int j = 0;
  string ss;
  while (true) {
    while (j < n && a[j].a <= x)
      s.insert({-a[j].a + a[j].b, a[j].s}), j++;

    if (s.empty())
      break;

    x += s.rbegin()->first;
    ss += s.rbegin()->second;
    // cout << x << endl;
    if (x < 0) {
      cout << "No";
      return 0;
    }
    auto it = s.end();
    it--;
    s.erase(it);
  }

  // x = 0;
  // for (int i = 0; i < ss.size(); ++i) {
  // 	if (ss[i] == '(')
  // 		x++;
  // 	else {
  // 		if (x == 0) {
  // 			cout << "No";
  // 			return 0;
  // 		} else {
  // 			x--;
  // 		}
  // 	}
  // }

  // cout << ss;
  if (j == n && x == 0) {
    cout << "Yes";
    return -1;
  } else {
    cout << "No";
  }
  return 0;
}