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

#include <algorithm>
#include <bitset>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <iomanip>
#include <iostream>
#include <map>
#include <queue>
#include <set>
#include <sstream>
#include <stack>
#include <string>
#include <vector>
#define rep(i, n) for (int i = 0; (i) < (n); i++)
#define rep1(i, n) for (int i = 1; (i) <= (n); i++)
#define mst(a, b) memset(a, b, sizeof(a))
#define scd(a) scanf("%d", &a)
#define scdd(a, b) scanf("%d%d", &a, &b)
#define scddd(a, b, c) scanf("%d%d%d", &a, &b, &c)
#define IOS ios::sync_with_stdio(false), cin.tie(0), cout.tie(0)
#define dbg(a) cout << "* " << #a << " : " << a << endl
#define fr first
#define se second
// #define ls x<<1
// #define rs x<<1|1
#define ll long long
#define ull unsigned long long
#define pii pair<int, int>
#define pll pair<ll, ll>
#define pdd pair<double, double>
#define lowbit(x) x & (-x)
#define ac cout << ans << endl
// #define DEBUG 0
using namespace std;
const double pi = acos(-1.0);
const double eps = 1e-10;
const ull hashp = 131;
const ll INF = 0x3f3f3f3f3f3f3f3fll;
const int inf = 0x3f3f3f3f;
const int mod = 1e9 + 7;
const int maxn = 2e5 + 100;
int ans[maxn];
char s[maxn];
int sum[3], f[maxn];
int getcnt(int x) {
  int ret = 0;
  for (; x; x &= (x - 1))
    ret++;
  return ret;
}
int dfs(int x) {
  if (!x)
    return 0;
  if (~f[x])
    return f[x];
  return f[x] = dfs(x % getcnt(x)) + 1;
}
void solve() {
  int n;
  scd(n);
  scanf("%s", s + 1);
  int num = 0;
  rep1(i, n) if (s[i] == '1') num++;
  rep1(i, n) {
    if (num > 1)
      sum[0] = (sum[0] * 2 + (s[i] - '0')) % (num - 1);
    sum[1] = (sum[1] * 2 + (s[i] - '0')) % (num + 1);
  }
  int now[2] = {1, 1};
  for (int i = n; i; i--) {
    if (s[i] == '0')
      ans[i] = (now[1] + sum[1]) % (num + 1);
    else if (num > 1)
      ans[i] = (-now[0] + sum[0] + num - 1) % (num - 1);
    else
      ans[i] = -1;
    if (num > 1)
      now[0] = now[0] * 2 % (num - 1);
    now[1] = now[1] * 2 % (num + 1);
  }
  mst(f, -1);
  rep1(i, n) if (~ans[i]) printf("%d\\n", dfs(ans[i]) + 1);
  else printf("0\\n");
}
int main() {
  // IOS;
  // freopen("D:\\\\data.txt","r",stdin);
  // freopen("D:\\\\out.txt","w",stdout);
  solve();

  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;

  return 0;
}

Error: 0

Fixed submission:

#include <algorithm>
#include <bitset>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <iomanip>
#include <iostream>
#include <map>
#include <queue>
#include <set>
#include <sstream>
#include <stack>
#include <string>
#include <vector>
#define rep(i, n) for (int i = 0; (i) < (n); i++)
#define rep1(i, n) for (int i = 1; (i) <= (n); i++)
#define mst(a, b) memset(a, b, sizeof(a))
#define scd(a) scanf("%d", &a)
#define scdd(a, b) scanf("%d%d", &a, &b)
#define scddd(a, b, c) scanf("%d%d%d", &a, &b, &c)
#define IOS ios::sync_with_stdio(false), cin.tie(0), cout.tie(0)
#define dbg(a) cout << "* " << #a << " : " << a << endl
#define fr first
#define se second
// #define ls x<<1
// #define rs x<<1|1
#define ll long long
#define ull unsigned long long
#define pii pair<int, int>
#define pll pair<ll, ll>
#define pdd pair<double, double>
#define lowbit(x) x & (-x)
#define ac cout << ans << endl
// #define DEBUG 0
using namespace std;
const double pi = acos(-1.0);
const double eps = 1e-10;
const ull hashp = 131;
const ll INF = 0x3f3f3f3f3f3f3f3fll;
const int inf = 0x3f3f3f3f;
const int mod = 1e9 + 7;
const int maxn = 2e5 + 100;
int ans[maxn];
char s[maxn];
int sum[3], f[maxn];
int getcnt(int x) {
  int ret = 0;
  for (; x; x &= (x - 1))
    ret++;
  return ret;
}
int dfs(int x) {
  if (!x)
    return 0;
  if (~f[x])
    return f[x];
  return f[x] = dfs(x % getcnt(x)) + 1;
}
void solve() {
  int n;
  scd(n);
  scanf("%s", s + 1);
  int num = 0;
  rep1(i, n) if (s[i] == '1') num++;
  rep1(i, n) {
    sum[0] = (sum[0] * 2 + (s[i] - '0')) % (num - 1);
    sum[1] = (sum[1] * 2 + (s[i] - '0')) % (num + 1);
  }
  int now[2] = {1, 1};
  for (int i = n; i; i--) {
    if (s[i] == '0')
      ans[i] = (now[1] + sum[1]) % (num + 1);
    else
      ans[i] = (-now[0] + sum[0] + num - 1) % (num - 1);
    now[0] = now[0] * 2 % (num - 1);
    now[1] = now[1] * 2 % (num + 1);
  }
  mst(f, -1);
  rep1(i, n) printf("%d\\n", dfs(ans[i]) + 1);
}
int main() {
  // IOS;
  // freopen("D:\\\\data.txt","r",stdin);
  // freopen("D:\\\\out.txt","w",stdout);
  solve();

  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;

  return 0;
}