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

#include <bits/stdc++.h>
using namespace std;
#define ALL(x) x.begin(), x.end()
#define rep(i, n) for (int i = 0; i < (n); i++)
#define debug(v)                                                               \\
  cout << #v << ":";                                                           \\
  for (auto x : v) {                                                           \\
    cout << x << ' ';                                                          \\
  }                                                                            \\
  cout << endl;
#define mod 1000000007
using ll = long long;
const int INF = 1000000000;
const ll LINF = 1001002003004005006ll;
int dx[] = {1, 0, -1, 0};
int dy[] = {0, 1, 0, -1};
// ll gcd(ll a,ll b){return b?gcd(b,a%b):a;}
template <class T> bool chmax(T &a, const T &b) {
  if (a < b) {
    a = b;
    return true;
  }
  return false;
}
template <class T> bool chmin(T &a, const T &b) {
  if (b < a) {
    a = b;
    return true;
  }
  return false;
}
#define int ll
struct IOSetup {
  IOSetup() {
    cin.tie(0);
    ios::sync_with_stdio(0);
    cout << fixed << setprecision(12);
  }
} iosetup;

template <typename T1, typename T2>
ostream &operator<<(ostream &os, const pair<T1, T2> &p) {
  os << p.first << " " << p.second;
  return os;
}

template <typename T> ostream &operator<<(ostream &os, const vector<T> &v) {
  for (int i = 0; i < (int)v.size(); i++)
    os << v[i] << (i + 1 == v.size() ? "" : " ");
  return os;
}

ll pow_mod(ll x, ll n, ll MOD) {
  if (n == 0)
    return 1;
  ll ret = pow_mod((x * x) % MOD, n / 2, MOD);
  if (n & 1)
    ret = (ret * x) % MOD;
  return ret;
}

signed main() {
  int n;
  cin >> n;
  string s;
  cin >> s;

  int m = 0;
  for (auto c : s) {
    if (c == '1')
      m++;
  }

  int l = m + 1;
  m--;
  bool f = false;
  if (m == 0)
    f = true;
  int mm = 0, ml = 0;
  for (auto c : s) {
    if (!f)
      mm = 2 * mm + (c - '0');
    ml = 2 * ml + (c - '0');
    if (!f)
      mm %= m;
    ml %= l;
  }

  // 増やす->l , 減らす->m
  rep(i, s.size()) {
    int d = n - 1 - i;
    if (s[i] == '1') {
      if (f) {
        cout << 0 << endl;
        continue;
      }
      // m
      int k = mm;
      k -= pow_mod(2, d, m);
      if (k < 0)
        k += m;
      // cout<<"m "<<k<<endl;
      int ans = 1;
      while (k) {
        ans++;
        k %= __builtin_popcountll(k);
      }
      cout << ans << endl;
    } else {
      // l
      int k = ml;
      k += pow_mod(2, d, l);
      k %= l;
      // cout<<"l "<<k<<endl;

      int ans = 1;
      while (k) {
        ans++;
        k %= __builtin_popcountll(k);
      }
      cout << ans << endl;
    }
  }

  return 0;
}


Error: 0

Fixed submission:

#include <bits/stdc++.h>
using namespace std;
#define ALL(x) x.begin(), x.end()
#define rep(i, n) for (int i = 0; i < (n); i++)
#define debug(v)                                                               \\
  cout << #v << ":";                                                           \\
  for (auto x : v) {                                                           \\
    cout << x << ' ';                                                          \\
  }                                                                            \\
  cout << endl;
#define mod 1000000007
using ll = long long;
const int INF = 1000000000;
const ll LINF = 1001002003004005006ll;
int dx[] = {1, 0, -1, 0};
int dy[] = {0, 1, 0, -1};
// ll gcd(ll a,ll b){return b?gcd(b,a%b):a;}
template <class T> bool chmax(T &a, const T &b) {
  if (a < b) {
    a = b;
    return true;
  }
  return false;
}
template <class T> bool chmin(T &a, const T &b) {
  if (b < a) {
    a = b;
    return true;
  }
  return false;
}
#define int ll
struct IOSetup {
  IOSetup() {
    cin.tie(0);
    ios::sync_with_stdio(0);
    cout << fixed << setprecision(12);
  }
} iosetup;

template <typename T1, typename T2>
ostream &operator<<(ostream &os, const pair<T1, T2> &p) {
  os << p.first << " " << p.second;
  return os;
}

template <typename T> ostream &operator<<(ostream &os, const vector<T> &v) {
  for (int i = 0; i < (int)v.size(); i++)
    os << v[i] << (i + 1 == v.size() ? "" : " ");
  return os;
}

ll pow_mod(ll x, ll n, ll MOD) {
  if (n == 0)
    return 1;
  ll ret = pow_mod((x * x) % MOD, n / 2, MOD);
  if (n & 1)
    ret = (ret * x) % MOD;
  return ret;
}

signed main() {
  int n;
  cin >> n;
  string s;
  cin >> s;

  int m = 0;
  for (auto c : s) {
    if (c == '1')
      m++;
  }

  int l = m + 1;
  m--;
  int mm = 0, ml = 0;
  for (auto c : s) {
    mm = 2 * mm + (c - '0');
    ml = 2 * ml + (c - '0');
    mm %= m;
    ml %= l;
  }

  // 増やす->l , 減らす->m
  rep(i, s.size()) {
    int d = n - 1 - i;
    if (s[i] == '1') {
      // m
      int k = mm;
      k -= pow_mod(2, d, m);
      if (k < 0)
        k += m;
      // cout<<"m "<<k<<endl;
      int ans = 1;
      while (k) {
        ans++;
        k %= __builtin_popcountll(k);
      }
      cout << ans << endl;
    } else {
      // l
      int k = ml;
      k += pow_mod(2, d, l);
      k %= l;
      // cout<<"l "<<k<<endl;

      int ans = 1;
      while (k) {
        ans++;
        k %= __builtin_popcountll(k);
      }
      cout << ans << endl;
    }
  }

  return 0;
}