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

/* template.cpp [[[ */
#include <bits/stdc++.h>
using namespace std;
#define get_macro(a, b, c, d, name, ...) name
#define rep(...) get_macro(__VA_ARGS__, rep4, rep3, rep2, rep1)(__VA_ARGS__)
#define rrep(...)                                                              \\
  get_macro(__VA_ARGS__, rrep4, rrep3, rrep2, rrep1)(__VA_ARGS__)
#define rep1(n) rep2(i_, n)
#define rep2(i, n) rep3(i, 0, n)
#define rep3(i, a, b) rep4(i, a, b, 1)
#define rep4(i, a, b, s) for (ll i = (a); i < (ll)(b); i += (ll)s)
#define rrep1(n) rrep2(i_, n)
#define rrep2(i, n) rrep3(i, 0, n)
#define rrep3(i, a, b) rrep4(i, a, b, 1)
#define rrep4(i, a, b, s) for (ll i = (ll)(b)-1; i >= (ll)(a); i -= (ll)s)
#define each(x, c) for (auto &&x : c)
#define fs first
#define sc second
#define all(c) begin(c), end(c)
using ui = unsigned;
using ll = long long;
using ul = unsigned long long;
using ld = long double;
const int inf = 1e9 + 10;
const ll inf_ll = 1e18 + 10;
const ll mod = 1e9 + 7;
const ll mod9 = 1e9 + 9;
const int dx[]{-1, 0, 1, 0, -1, 1, 1, -1};
const int dy[]{0, -1, 0, 1, -1, -1, 1, 1};
template <class T, class U> void chmin(T &x, const U &y) { x = min<T>(x, y); }
template <class T, class U> void chmax(T &x, const U &y) { x = max<T>(x, y); }
struct prepare_ {
  prepare_() {
    cin.tie(nullptr);
    ios::sync_with_stdio(false);
    cout << fixed << setprecision(12);
  }
} prepare__;
ll in() {
  ll x;
  cin >> x;
  return x;
}
vector<ll> in(size_t n) {
  vector<ll> v(n);
  each(x, v) cin >> x;
  return v;
}
/* ]]] */

#define BEGIN_STACK_EXTEND(size)                                               \\
  void *stack_extend_memory_ = malloc(size);                                   \\
  void *stack_extend_origin_memory_;                                           \\
  char *stack_extend_dummy_memory_ = (char *)alloca(                           \\
      (1 + (int)(((long long)stack_extend_memory_) & 127)) * 16);              \\
  *stack_extend_dummy_memory_ = 0;                                             \\
  asm volatile("mov %%rsp, %%rbx\\nmov %%rax, %%rsp"                            \\
               : "=b"(stack_extend_origin_memory_)                             \\
               : "a"((char *)stack_extend_memory_ + (size)-1024));
#define END_STACK_EXTEND                                                       \\
  asm volatile("mov %%rax, %%rsp" ::"a"(stack_extend_origin_memory_));         \\
  free(stack_extend_memory_);

int n;
int a[500000];
int b[3];

int dfs(int x, int y, int s) {
  if ((b[1] != x || b[2] != y) && s == 0)
    return 0;
  int res = 0;
  if (x > 0)
    chmax(res, 1 + dfs(x - 1, y, (s + 1) % 3));
  if (y > 0)
    chmax(res, 1 + dfs(x, y - 1, (s + 2) % 3));
  return res;
}

int main() {
  BEGIN_STACK_EXTEND(128 * 1024 * 1024);

  cin >> n;
  rep(i, n) cin >> a[i];
  rep(i, n) b[a[i] % 3]++;
  if (b[1] == 0 && b[2] == 0)
    cout << "1\\n", exit(0);
  cout << b[0] + dfs(b[1], b[2], 0) << endl;

  END_STACK_EXTEND;
}

Error: 0

Fixed submission:

/* template.cpp [[[ */
#include <bits/stdc++.h>
using namespace std;
#define get_macro(a, b, c, d, name, ...) name
#define rep(...) get_macro(__VA_ARGS__, rep4, rep3, rep2, rep1)(__VA_ARGS__)
#define rrep(...)                                                              \\
  get_macro(__VA_ARGS__, rrep4, rrep3, rrep2, rrep1)(__VA_ARGS__)
#define rep1(n) rep2(i_, n)
#define rep2(i, n) rep3(i, 0, n)
#define rep3(i, a, b) rep4(i, a, b, 1)
#define rep4(i, a, b, s) for (ll i = (a); i < (ll)(b); i += (ll)s)
#define rrep1(n) rrep2(i_, n)
#define rrep2(i, n) rrep3(i, 0, n)
#define rrep3(i, a, b) rrep4(i, a, b, 1)
#define rrep4(i, a, b, s) for (ll i = (ll)(b)-1; i >= (ll)(a); i -= (ll)s)
#define each(x, c) for (auto &&x : c)
#define fs first
#define sc second
#define all(c) begin(c), end(c)
using ui = unsigned;
using ll = long long;
using ul = unsigned long long;
using ld = long double;
const int inf = 1e9 + 10;
const ll inf_ll = 1e18 + 10;
const ll mod = 1e9 + 7;
const ll mod9 = 1e9 + 9;
const int dx[]{-1, 0, 1, 0, -1, 1, 1, -1};
const int dy[]{0, -1, 0, 1, -1, -1, 1, 1};
template <class T, class U> void chmin(T &x, const U &y) { x = min<T>(x, y); }
template <class T, class U> void chmax(T &x, const U &y) { x = max<T>(x, y); }
struct prepare_ {
  prepare_() {
    cin.tie(nullptr);
    ios::sync_with_stdio(false);
    cout << fixed << setprecision(12);
  }
} prepare__;
ll in() {
  ll x;
  cin >> x;
  return x;
}
vector<ll> in(size_t n) {
  vector<ll> v(n);
  each(x, v) cin >> x;
  return v;
}
/* ]]] */

int n;
int a[500000];
int b[3];

int dfs(int x, int y, int s) {
  if ((b[1] != x || b[2] != y) && s == 0)
    return 0;
  int res = 0;
  if (x > 0)
    chmax(res, 1 + dfs(x - 1, y, (s + 1) % 3));
  if (y > 0)
    chmax(res, 1 + dfs(x, y - 1, (s + 2) % 3));
  return res;
}

int main() {
  cin >> n;
  rep(i, n) cin >> a[i];
  rep(i, n) b[a[i] % 3]++;
  if (b[1] == 0 && b[2] == 0)
    cout << "1\\n", exit(0);
  cout << b[0] + dfs(b[1], b[2], 0) << endl;
}