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

#line 2 "header.hpp"

//%snippet.set('header')%
//%snippet.fold()%
#ifndef HEADER_H
#define HEADER_H

// template version 2.0
using namespace std;
#include <bits/stdc++.h>

// varibable settings
const long long INF = 1e18;
template <class T> constexpr T inf = numeric_limits<T>::max() / 2.1;

#define _overload3(_1, _2, _3, name, ...) name
#define _rep(i, n) repi(i, 0, n)
#define repi(i, a, b) for (ll i = (ll)(a); i < (ll)(b); ++i)
#define rep(...) _overload3(__VA_ARGS__, repi, _rep, )(__VA_ARGS__)
#define _rrep(i, n) rrepi(i, 0, n)
#define rrepi(i, a, b) for (ll i = (ll)((b)-1); i >= (ll)(a); --i)
#define r_rep(...) _overload3(__VA_ARGS__, rrepi, _rrep, )(__VA_ARGS__)
#define each(i, a) for (auto &&i : a)
#define all(x) (x).begin(), (x).end()
#define sz(x) ((int)(x).size())
#define pb(a) push_back(a)
#define mp(a, b) make_pair(a, b)
#define mt(...) make_tuple(__VA_ARGS__)
#define ub upper_bound
#define lb lower_bound
#define lpos(A, x) (lower_bound(all(A), x) - A.begin())
#define upos(A, x) (upper_bound(all(A), x) - A.begin())
template <class T> inline void chmax(T &a, const T &b) {
  if ((a) < (b))
    (a) = (b);
}
template <class T> inline void chmin(T &a, const T &b) {
  if ((a) > (b))
    (a) = (b);
}
template <typename X, typename T> auto make_table(X x, T a) {
  return vector<T>(x, a);
}
template <typename X, typename Y, typename Z, typename... Zs>
auto make_table(X x, Y y, Z z, Zs... zs) {
  auto cont = make_table(y, z, zs...);
  return vector<decltype(cont)>(x, cont);
}

#define cdiv(a, b) (((a) + (b)-1) / (b))
#define is_in(x, a, b) ((a) <= (x) && (x) < (b))
#define uni(x)                                                                 \\
  sort(all(x));                                                                \\
  x.erase(unique(all(x)), x.end())
#define slice(l, r) substr(l, r - l)

typedef long long ll;
typedef long double ld;
using vl = vector<ll>;
using vvl = vector<vl>;
using pll = pair<ll, ll>;

template <typename T> using PQ = priority_queue<T, vector<T>, greater<T>>;
void check_input() {
  assert(cin.eof() == 0);
  int tmp;
  cin >> tmp;
  assert(cin.eof() == 1);
}

#if defined(PCM) || defined(LOCAL)
#else
#define dump(...) ;
#define dump_1d(...) ;
#define dump_2d(...) ;
#define cerrendl ;
#endif

#endif /* HEADER_H */
//%snippet.end()%
#line 2 "solve.cpp"
template <class T = ll> using vec = vector<T>;
struct Fast {
  Fast() {
    std::cin.tie(0);
    ios::sync_with_stdio(false);
  }
} fast;

// snippet:to_bin {{{
string to_bin(ll n, ll d = 10) {
  // nをd桁の2進数で表示する。
  stringstream ss;
  ss << bitset<64>(n);
  return ss.str().substr(64 - d, d);
}
// ll d = (32 - __builtin_clz(n));  // 最大桁のd: (2^d)
// ll f = N - d; to_bin()で返ってきた文字列で最初に1が立っているindex
// snippet:to_bin }}}

vec<int> ans;

int func(int x) {
  if (x == 0)
    return 0;
  if (ans[x] != -1)
    return ans[x];
  int c = __builtin_popcount(x);
  return func(x % c) + 1;
}

int solve() {
  int n;
  cin >> n;
  string t;
  cin >> t;
  reverse(all(t));
  int y = 0;
  rep(i, n) {
    if (t[i] == '1')
      y++;
  }
  dump(y);
  ans.resize(200001, -1);

  vec<int> mod1(n);
  int x1 = 0;
  {
    if (y - 1 == 0) {
    } else {
      int mul = 1;
      rep(i, n) {
        if (t[i] == '1') {
          x1 += mul;
          x1 %= (y - 1);
          dump(i, x1);
        }
        mod1[i] = mul;
        mul *= 2;
        mul %= (y - 1);
      }
      dump(mod1, x1);
    }
  }
  dump(t);
  // if (y-1!=0){
  //     dump(stoll(t, 0, 2));
  //     dump(stoll(t, 0, 2)%(y-1));
  //     assert(stoll(t, 0, 2)%(y-1) == x1);
  // }

  vec<int> mod3(n);
  int x3 = 0;
  dump(t);
  {
    int mul = 1;
    dump(y + 1);
    rep(i, n) {
      if (t[i] == '1') {
        x3 += mul;
        x3 %= y + 1;
      }
      mod3[i] = mul;
      mul *= 2;
      mul %= y + 1;
    }
    dump(mod3, x3);
  }

  r_rep(i, n) {
    cerrendl;
    if (t[i] == '1') {
      if (y - 1 == 0) {
        cout << 0 << endl;
      } else {
        t[i] = '0';

        dump(i, t);
        // use x1
        int r = (x1 - mod1[i]) + (y - 1);
        r %= (y - 1);
        // int yy = stoll(t, 0, 2);
        // dump(r, yy, y-1, yy%(y-1));
        // assert(r == yy%(y-1));

        dump(r);
        if (r == 0) {
          cout << 1 << endl;
        } else {
          cout << 1 + func(r) << endl;
        }
      }
    } else {
      t[i] = '1';
      dump(i, t);
      // use x3
      int r = (x3 + mod3[i]) % (y + 1);
      dump(r);
      if (r == 0) {
        cout << 1 << endl;
      } else {
        cout << 1 + func(r) << endl;
      }
    }

    if (t[i] == '1')
      t[i] = '0';
    else
      t[i] = '1';
  }

  return 0;
}

int main() { /*{{{*/
  solve();
  check_input();
  return 0;
} /*}}}*/


Error: 0

Fixed submission:

#line 2 "header.hpp"

//%snippet.set('header')%
//%snippet.fold()%
#ifndef HEADER_H
#define HEADER_H

// template version 2.0
using namespace std;
#include <bits/stdc++.h>

// varibable settings
const long long INF = 1e18;
template <class T> constexpr T inf = numeric_limits<T>::max() / 2.1;

#define _overload3(_1, _2, _3, name, ...) name
#define _rep(i, n) repi(i, 0, n)
#define repi(i, a, b) for (ll i = (ll)(a); i < (ll)(b); ++i)
#define rep(...) _overload3(__VA_ARGS__, repi, _rep, )(__VA_ARGS__)
#define _rrep(i, n) rrepi(i, 0, n)
#define rrepi(i, a, b) for (ll i = (ll)((b)-1); i >= (ll)(a); --i)
#define r_rep(...) _overload3(__VA_ARGS__, rrepi, _rrep, )(__VA_ARGS__)
#define each(i, a) for (auto &&i : a)
#define all(x) (x).begin(), (x).end()
#define sz(x) ((int)(x).size())
#define pb(a) push_back(a)
#define mp(a, b) make_pair(a, b)
#define mt(...) make_tuple(__VA_ARGS__)
#define ub upper_bound
#define lb lower_bound
#define lpos(A, x) (lower_bound(all(A), x) - A.begin())
#define upos(A, x) (upper_bound(all(A), x) - A.begin())
template <class T> inline void chmax(T &a, const T &b) {
  if ((a) < (b))
    (a) = (b);
}
template <class T> inline void chmin(T &a, const T &b) {
  if ((a) > (b))
    (a) = (b);
}
template <typename X, typename T> auto make_table(X x, T a) {
  return vector<T>(x, a);
}
template <typename X, typename Y, typename Z, typename... Zs>
auto make_table(X x, Y y, Z z, Zs... zs) {
  auto cont = make_table(y, z, zs...);
  return vector<decltype(cont)>(x, cont);
}

#define cdiv(a, b) (((a) + (b)-1) / (b))
#define is_in(x, a, b) ((a) <= (x) && (x) < (b))
#define uni(x)                                                                 \\
  sort(all(x));                                                                \\
  x.erase(unique(all(x)), x.end())
#define slice(l, r) substr(l, r - l)

typedef long long ll;
typedef long double ld;
using vl = vector<ll>;
using vvl = vector<vl>;
using pll = pair<ll, ll>;

template <typename T> using PQ = priority_queue<T, vector<T>, greater<T>>;
void check_input() {
  assert(cin.eof() == 0);
  int tmp;
  cin >> tmp;
  assert(cin.eof() == 1);
}

#if defined(PCM) || defined(LOCAL)
#else
#define dump(...) ;
#define dump_1d(...) ;
#define dump_2d(...) ;
#define cerrendl ;
#endif

#endif /* HEADER_H */
//%snippet.end()%
#line 2 "naive.cpp"
template <class T = ll> using vec = vector<T>;
struct Fast {
  Fast() {
    std::cin.tie(0);
    ios::sync_with_stdio(false);
  }
} fast;

int solve() {
  int n;
  cin >> n;
  string t;
  cin >> t;

  rep(i, 0, n) {
    cerrendl;
    if (t[i] == '1')
      t[i] = '0';
    else
      t[i] = '1';
    ll x = stoll(t, 0, 2);
    int cnt = 0;
    while (x != 0) {
      int c = __builtin_popcountll(x);
      dump(x);
      x %= c;
      cnt++;
    }
    cout << cnt << endl;
    if (t[i] == '1')
      t[i] = '0';
    else
      t[i] = '1';
  }

  return 0;
}

int main() { /*{{{*/
  solve();
  check_input();
  return 0;
} /*}}}*/