- Quiz
- AC
- 解説
- editorial https://hackmd.io/@qLethon/rk2qAIrQD
- を再現したようなコードになっているので参考になるかと思います
- int128を使ったのは少し気になる(AOJは使えるのね)
using LL = __int128_t; int main(){ cin.tie(0); ios::sync_with_stdio(false); // input ll N,P;cin>>N>>P; ll n; // 切り捨てるブロック数 ll len; // 切り捨てる長さ VI A(50); if(P==2){ n = (N+1)/4; len = 4*n; } else{ n = (N+1)/P; // 切り取り len = P*n; } // 余った部分は具体的にXORを考える FOR(i,len,N+1){ ll v = i; // vをP進数で表して足す rep(j,50){ A[j] += v%P; A[j] %= P; v /= P; if(v==0) break; } } ll ans = 0; LL power=1; // overflow注意 rep(i,50){ ans += A[i] * power; power *= P; if(power>inf) break; } p(ans); return 0; }