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

[AGC039C] Division by Two with Something

题目描述

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

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

输入格式

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

N N X X

输出格式

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

题目大意

题目描述

现在给你一个整数NN和一个二进制数XX,对0X0 \sim X之间的每个整数KK在返回到其原始值之前,需要执行多少次下面的操作:

如果KK是奇数

K=(K1)÷2K=(K-1) \div 2

如果KK是偶数

K=(K÷2)+2N1K=(K \div 2)+2^{N-1}

输入格式

第一行输入一个整数NN,第二行输入一个NN位的整数XX

输出格式

一个整数,表示0X0 \sim X之间的每个整数KK在返回到其原始值之前,需要执行的操作次数的总和。

由于答案可能过大,请对最终答案mod 998244353mod \text{ 998244353}

说明/提示

  • 1N2×1051 \le N \le 2 \times10^5
  • 0X2N0 \le X \le 2^N
  • XX是一个长度为NN的二进制数(XX的数位不足NN时用前导00补齐)
  • 所有数字都是整数

例如,K=3K = 3时,操作为:1,0,4,6,7,3,所以K=3K=3时答案是66

3
111
40
6
110101
616
30
001110011011011101010111011100
549320998

提示

制約

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

Sample Explanation 1

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