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

#include <algorithm>
#include <bits/stdc++.h>
#include <bitset>
#include <cassert>
#include <chrono>
#include <cmath>
#include <complex>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <ctime>
#include <iostream>
#include <map>
#include <queue>
#include <random>
#include <set>
#include <string>
#include <unordered_map>
#include <unordered_set>
#include <vector>
using namespace std;

#define ll long long
#define ld long double
#define ar array

#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace __gnu_pbds;

template <typename T>
using oset =
    tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>;

#define vt vector
#define vi vector<int>
#define vll vector<long>
#define vs vector<string>
#define vvl vector<vector<long long>>
#define vvi vector<vector<int>>

using uint = unsigned int;
using ull = unsigned long long;
template <typename T> using pair2 = pair<T, T>;
using pii = pair<int, int>;
using pli = pair<ll, int>;
using pll = pair<ll, ll>;
mt19937_64 rng(chrono::steady_clock::now().time_since_epoch().count());
ll myRand(ll B) { return (ull)rng() % B; }

#define pb push_back
#define mp make_pair

#define pb push_back
#define fi first
#define se second

#define all(x) (x).begin(), (x).end()
#define sz(x) (int)(x).size()

#define F_OR(i, a, b, s)                                                       \\
  for (int i = (a); (s) > 0 ? i < (b) : i > (b); i += (s))
#define F_OR1(e) F_OR(i, 0, e, 1)
#define F_OR2(i, e) F_OR(i, 0, e, 1)
#define F_OR3(i, b, e) F_OR(i, b, e, 1)
#define F_OR4(i, b, e, s) F_OR(i, b, e, s)
#define GET5(a, b, c, d, e, ...) e
#define F_ORC(...) GET5(__VA_ARGS__, F_OR4, F_OR3, F_OR2, F_OR1)
#define FOR(...) F_ORC(__VA_ARGS__)(__VA_ARGS__)
#define EACH(x, a) for (auto &x : a)

template <class T> bool umin(T &a, const T &b) { return b < a ? a = b, 1 : 0; }
template <class T> bool umax(T &a, const T &b) { return a < b ? a = b, 1 : 0; }

ll FIRSTTRUE(function<bool(ll)> f, ll lb, ll rb) {
  while (lb < rb) {
    ll mb = (lb + rb) / 2;
    f(mb) ? rb = mb : lb = mb + 1;
  }
  return lb;
}
ll LASTTRUE(function<bool(ll)> f, ll lb, ll rb) {
  while (lb < rb) {
    ll mb = (lb + rb + 1) / 2;
    f(mb) ? lb = mb : rb = mb - 1;
  }
  return lb;
}

template <class A> void read(vt<A> &v);
template <class A, size_t S> void read(ar<A, S> &a);
template <class T> void read(T &x) { cin >> x; }
void read(double &d) {
  string t;
  read(t);
  d = stod(t);
}
void read(long double &d) {
  string t;
  read(t);
  d = stold(t);
}
template <class H, class... T> void read(H &h, T &...t) {
  read(h);
  read(t...);
}
template <class A> void read(vt<A> &x) {
  EACH(a, x)
  read(a);
}
template <class A, size_t S> void read(array<A, S> &x) {
  EACH(a, x)
  read(a);
}

string to_string(char c) { return string(1, c); }
string to_string(bool b) { return b ? "true" : "false"; }
string to_string(const char *s) { return string(s); }
string to_string(string s) { return s; }
string to_string(vt<bool> v) {
  string res;
  FOR(sz(v))
  res += char('0' + v[i]);
  return res;
}

template <size_t S> string to_string(bitset<S> b) {
  string res;
  FOR(S)
  res += char('0' + b[i]);
  return res;
}
template <class T> string to_string(T v) {
  bool f = 1;
  string res;
  EACH(x, v) {
    if (!f)
      res += ' ';
    f = 0;
    res += to_string(x);
  }
  return res;
}

template <class A> void write(A x) { cout << to_string(x); }
template <class H, class... T> void write(const H &h, const T &...t) {
  write(h);
  write(t...);
}
void print() { write("\\n"); }
template <class H, class... T> void print(const H &h, const T &...t) {
  write(h);
  if (sizeof...(t))
    write(' ');
  print(t...);
}

void DBG() { cerr << "]" << endl; }
template <class H, class... T> void DBG(H h, T... t) {
  cerr << to_string(h);
  if (sizeof...(t))
    cerr << ", ";
  DBG(t...);
}
#ifdef _DEBUG
#define dbg(...)                                                               \\
  cerr << "LINE(" << __LINE__ << ") -> [" << #__VA_ARGS__ << "]: [",           \\
      DBG(__VA_ARGS__)
#else
#define dbg(...) 0
#endif

template <class T> void offset(ll o, T &x) { x += o; }
template <class T> void offset(ll o, vt<T> &x) {
  EACH(a, x)
  offset(o, a);
}
template <class T, size_t S> void offset(ll o, ar<T, S> &x) {
  EACH(a, x)
  offset(o, a);
}

mt19937 mt_rng(chrono::steady_clock::now().time_since_epoch().count());
ll randint(ll a, ll b) { return uniform_int_distribution<ll>(a, b)(mt_rng); }

template <class T, class U> void vti(vt<T> &v, U x, size_t n) {
  v = vt<T>(n, x);
}
template <class T, class U> void vti(vt<T> &v, U x, size_t n, size_t m...) {
  v = vt<T>(n);
  EACH(a, v)
  vti(a, x, m);
}

const int d4i[4] = {-1, 0, 1, 0}, d4j[4] = {0, 1, 0, -1};
const int d8i[8] = {-1, -1, 0, 1, 1, 1, 0, -1},
          d8j[8] = {0, 1, 1, 1, 0, -1, -1, -1};

void solve() {
  int n;
  read(n);
  vt<int> p(n);
  iota(all(p), 1);
  print(p);
}

int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
#ifdef _DEBUG
  freopen("q1.input", "r", stdin);
#endif
  int n;
  cin >> n;
  string s;
  cin >> s;
  int mod = 0;
  FOR(n)
  mod += (int)(s[i] == '1');
  uint a1[2 * 100005 + 1];
  uint a2[2 * 100005 + 1];
  // ar<int, 2*10e5+1> a1;
  // ar<int, 2*10e5+1> a2;
  a1[0] = 1;
  a2[0] = 1;
  int mod1 = mod + 1;
  int mod2 = mod - 1;
  if (mod <= 1)
    mod2 = mod1;
  int total1 = 0, total2 = 0;
  for (int i = n - 1, j = 0; i >= 0; i--, j++) {
    // dbg("yoooooooo",i,j);
    if (j > 0) {
      a1[j] = (a1[j - 1] * 2) % mod1;
      a2[j] = (a2[j - 1] * 2) % mod2;
    }
    if (s[i] == '1') {
      total1 = (total1 + a1[j]) % mod1;
      total2 = (total2 + a2[j]) % mod2;
    }
  }
  for (int i = 0; i < n; i++) {
    int cnt = 1;
    uint x;
    if (s[i] == '1') {
      int cur_mod = mod - 1;
      if (mod == 1) {
        cnt = 0;
        x = 0;
      } else {
        x = (total2 + mod2 - a2[n - 1 - i]) % mod2;
      }
    } else {
      x = (total1 + a1[n - 1 - i]) % mod1;
    }
    while (x > 0) {
      x %= __builtin_popcount(x);
      cnt++;
    }
    cout << cnt << '\\n';
  }

  return 0;
}

Error: 0

Fixed submission:

#include <algorithm>
#include <bits/stdc++.h>
#include <bitset>
#include <cassert>
#include <chrono>
#include <cmath>
#include <complex>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <ctime>
#include <iostream>
#include <map>
#include <queue>
#include <random>
#include <set>
#include <string>
#include <unordered_map>
#include <unordered_set>
#include <vector>
using namespace std;

#define ll long long
#define ld long double
#define ar array

#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace __gnu_pbds;

template <typename T>
using oset =
    tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>;

#define vt vector
#define vi vector<int>
#define vll vector<long>
#define vs vector<string>
#define vvl vector<vector<long long>>
#define vvi vector<vector<int>>

using uint = unsigned int;
using ull = unsigned long long;
template <typename T> using pair2 = pair<T, T>;
using pii = pair<int, int>;
using pli = pair<ll, int>;
using pll = pair<ll, ll>;
mt19937_64 rng(chrono::steady_clock::now().time_since_epoch().count());
ll myRand(ll B) { return (ull)rng() % B; }

#define pb push_back
#define mp make_pair

#define pb push_back
#define fi first
#define se second

#define all(x) (x).begin(), (x).end()
#define sz(x) (int)(x).size()

#define F_OR(i, a, b, s)                                                       \\
  for (int i = (a); (s) > 0 ? i < (b) : i > (b); i += (s))
#define F_OR1(e) F_OR(i, 0, e, 1)
#define F_OR2(i, e) F_OR(i, 0, e, 1)
#define F_OR3(i, b, e) F_OR(i, b, e, 1)
#define F_OR4(i, b, e, s) F_OR(i, b, e, s)
#define GET5(a, b, c, d, e, ...) e
#define F_ORC(...) GET5(__VA_ARGS__, F_OR4, F_OR3, F_OR2, F_OR1)
#define FOR(...) F_ORC(__VA_ARGS__)(__VA_ARGS__)
#define EACH(x, a) for (auto &x : a)

template <class T> bool umin(T &a, const T &b) { return b < a ? a = b, 1 : 0; }
template <class T> bool umax(T &a, const T &b) { return a < b ? a = b, 1 : 0; }

ll FIRSTTRUE(function<bool(ll)> f, ll lb, ll rb) {
  while (lb < rb) {
    ll mb = (lb + rb) / 2;
    f(mb) ? rb = mb : lb = mb + 1;
  }
  return lb;
}
ll LASTTRUE(function<bool(ll)> f, ll lb, ll rb) {
  while (lb < rb) {
    ll mb = (lb + rb + 1) / 2;
    f(mb) ? lb = mb : rb = mb - 1;
  }
  return lb;
}

template <class A> void read(vt<A> &v);
template <class A, size_t S> void read(ar<A, S> &a);
template <class T> void read(T &x) { cin >> x; }
void read(double &d) {
  string t;
  read(t);
  d = stod(t);
}
void read(long double &d) {
  string t;
  read(t);
  d = stold(t);
}
template <class H, class... T> void read(H &h, T &...t) {
  read(h);
  read(t...);
}
template <class A> void read(vt<A> &x) {
  EACH(a, x)
  read(a);
}
template <class A, size_t S> void read(array<A, S> &x) {
  EACH(a, x)
  read(a);
}

string to_string(char c) { return string(1, c); }
string to_string(bool b) { return b ? "true" : "false"; }
string to_string(const char *s) { return string(s); }
string to_string(string s) { return s; }
string to_string(vt<bool> v) {
  string res;
  FOR(sz(v))
  res += char('0' + v[i]);
  return res;
}

template <size_t S> string to_string(bitset<S> b) {
  string res;
  FOR(S)
  res += char('0' + b[i]);
  return res;
}
template <class T> string to_string(T v) {
  bool f = 1;
  string res;
  EACH(x, v) {
    if (!f)
      res += ' ';
    f = 0;
    res += to_string(x);
  }
  return res;
}

template <class A> void write(A x) { cout << to_string(x); }
template <class H, class... T> void write(const H &h, const T &...t) {
  write(h);
  write(t...);
}
void print() { write("\\n"); }
template <class H, class... T> void print(const H &h, const T &...t) {
  write(h);
  if (sizeof...(t))
    write(' ');
  print(t...);
}

void DBG() { cerr << "]" << endl; }
template <class H, class... T> void DBG(H h, T... t) {
  cerr << to_string(h);
  if (sizeof...(t))
    cerr << ", ";
  DBG(t...);
}
#ifdef _DEBUG
#define dbg(...)                                                               \\
  cerr << "LINE(" << __LINE__ << ") -> [" << #__VA_ARGS__ << "]: [",           \\
      DBG(__VA_ARGS__)
#else
#define dbg(...) 0
#endif

template <class T> void offset(ll o, T &x) { x += o; }
template <class T> void offset(ll o, vt<T> &x) {
  EACH(a, x)
  offset(o, a);
}
template <class T, size_t S> void offset(ll o, ar<T, S> &x) {
  EACH(a, x)
  offset(o, a);
}

mt19937 mt_rng(chrono::steady_clock::now().time_since_epoch().count());
ll randint(ll a, ll b) { return uniform_int_distribution<ll>(a, b)(mt_rng); }

template <class T, class U> void vti(vt<T> &v, U x, size_t n) {
  v = vt<T>(n, x);
}
template <class T, class U> void vti(vt<T> &v, U x, size_t n, size_t m...) {
  v = vt<T>(n);
  EACH(a, v)
  vti(a, x, m);
}

const int d4i[4] = {-1, 0, 1, 0}, d4j[4] = {0, 1, 0, -1};
const int d8i[8] = {-1, -1, 0, 1, 1, 1, 0, -1},
          d8j[8] = {0, 1, 1, 1, 0, -1, -1, -1};

void solve() {
  int n;
  read(n);
  vt<int> p(n);
  iota(all(p), 1);
  print(p);
}

int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
#ifdef _DEBUG
  freopen("q1.input", "r", stdin);
#endif
  int n;
  cin >> n;
  string s;
  cin >> s;
  int mod = 0;
  FOR(n)
  mod += (int)(s[i] == '1');
  uint a1[2 * 10005 + 1];
  uint a2[2 * 10005 + 1];
  // ar<int, 2*10e5+1> a1;
  // ar<int, 2*10e5+1> a2;
  a1[0] = 1;
  a2[0] = 1;
  int mod1 = mod + 1;
  int mod2 = mod - 1;
  if (mod <= 1)
    mod2 = mod1;
  int total1 = 0, total2 = 0;
  // dbg("yoooooooo");
  for (int i = n - 1, j = 0; i >= 0; i--, j++) {
    if (j > 0) {
      a1[j] = (a1[j - 1] * 2) % mod1;
      a2[j] = (a2[j - 1] * 2) % mod2;
    }
    if (s[i] == '1') {
      total1 = (total1 + a1[j]) % mod1;
      total2 = (total2 + a2[j]) % mod2;
    }
  }
  for (int i = 0; i < n; i++) {
    int cnt = 1;
    uint x;
    if (s[i] == '1') {
      int cur_mod = mod - 1;
      if (mod == 1) {
        cnt = 0;
        x = 0;
      } else {
        x = (total2 + mod2 - a2[n - 1 - i]) % mod2;
      }
    } else {
      x = (total1 + a1[n - 1 - i]) % mod1;
    }
    while (x > 0) {
      x %= __builtin_popcount(x);
      cnt++;
    }
    cout << cnt << '\\n';
  }

  return 0;
}