AT_arc227_e [ARC227E] Shift and XOR Switches

题目描述

有一个长度为 $N$ 的序列 $B=(B_1,B_2,\ldots,B_N)$,其元素只包含 $0$ 和 $1$。初始时,$B_1=1$,其余所有元素均为 $0$。 现在有 $M$ 个开关,每个开关 $i$ 上写有整数 $A_i$($1 \le i \le M$)。每当按下第 $i$ 个开关时,对于所有满足 $1 \le j \le N$ 的整数 $j$,根据操作执行前的当前状态,同时进行如下操作: $$ B_j \leftarrow \begin{cases} B_j \oplus B_{j-A_i} & (A_i < j), \\ B_j & (j \leq A_i) \end{cases} $$ 其中 $\oplus$ 表示按位异或。 每个开关可以按 $0$ 次或 $1$ 次,开关的按下顺序可以任意。 请问,最终可能得到多少种不同的序列 $B$,答案对 $998244353$ 取模。 ::::info[什么是按位异或 $ \mathrm{XOR} $ 操作?] 非负整数 $A$ 与 $B$ 的按位异或,记作 $A \oplus B$,定义如下: - 记 $A$、$B$ 的二进制表示,在每一位 $2^k$ 位置($k \geq 0$),如果 $A$、$B$ 在该位上有且仅有一个为 $1$,则 $A \oplus B$ 的该位为 $1$,否则为 $0$。 例如,$3 \oplus 5 = 6$(二进制表示 $011 \oplus 101 = 110$)。对于 $k$ 个非负整数 $p_1, p_2, p_3, \dots, p_k$ 的按位异或,定义为 $(\dots ((p_1 \oplus p_2) \oplus p_3) \oplus \dots \oplus p_k)$,并且可以证明无论按什么顺序异或都得到相同结果。 ::::

输入格式

输入按以下格式从标准输入读取: > $N$ $M$ > $A_1$ $A_2$ $\ldots$ $A_M$

输出格式

输出最终可能得到的不同 $B$ 序列数量,对 $998244353$ 取模。

说明/提示

### 样例解释 1 共有四种可能的最终序列: - $(1,0,0,0)$ - $(1,0,1,0)$ - $(1,0,0,1)$ - $(1,0,1,1)$ ### 样例解释 2 共有两种可能的最终序列:$(1,0)$ 和 $(1,1)$。 ### 数据范围 - $2 \le N \le 2 \times 10^5$ - $1 \le M \le 2 \times 10^5$ - $1 \le A_i < N \quad (1 \le i \le M)$ - 所有输入均为整数。 由 ChatGPT 5 翻译