atcoder#AGC039C. [AGC039C] Division by Two with Something

[AGC039C] Division by Two with Something

配点 : 800800

問題文

整数 N,XN, X が与えられます。00 以上 XX 以下のすべての整数 kk に対し、 kk に以下の操作を繰り返すことによって次に kk に戻るまでの操作回数 (戻らない場合 00) を足し合わせた値を 998244353998244353 で割ったあまりを求めてください。

  • 現在の整数が奇数なら、11 を引いて 22 で割る。そうでなければ、22 で割って 2N12^{N-1} を足す。

制約

  • 1N2×1051 \leq N \leq 2\times 10^5
  • 0X<2N0 \leq X < 2^N
  • XX22 進表記でちょうど NN 桁与えられる (XXNN 桁より少ない場合、leading zero をつけて与えられる。)
  • 入力はすべて整数である

入力

入力は以下の形式で標準入力から与えられる。

NN

XX

出力

00 以上 XX 以下のすべての整数に対し、 操作を繰り返すことによってもとの整数に戻るまでの操作回数 (戻らない場合 00) を足し合わせた値を 998244353998244353 で割ったあまりを出力せよ。

3
111
40

例えば、k=3k=3 のとき、操作によって整数は 1,0,4,6,7,31,0,4,6,7,3 と順に変化します。したがって、k=3k=3 のときの操作回数は 66 です。

6
110101
616
30
001110011011011101010111011100
549320998