CF2043F Nim

题目描述

重温一下「Nim」游戏的规则。游戏开始时有 $ n $ 堆石子,第 $ i $ 堆中有若干石子。两名玩家轮流行动:选择一个不为空的石子堆,从中取走至少一个石子。不能进行操作的玩家将输掉游戏。 现有一个包含 $ n $ 个整数的数组 $ a $。Artem 和 Ruslan 打算在数组的部分区间上进行 Nim 游戏。每个游戏回合由一个区间 $ (l_i, r_i) $ 确定,其中 $ a_{l_i}, a_{l_i+1}, \dots, a_{r_i} $ 是各个石子堆的大小。 在每轮游戏开始前,Ruslan 可以选择从该区间中移除任意数量的堆,但至少要留下一个堆,因此最多可移除 $ (r_i - l_i) $ 堆。他可以选择不移除任何堆。移除后,游戏将在留下的堆上进行。 每个回合相互独立:某一回合的变动不会影响原始数组或其他回合。 Ruslan 的目标是移除尽可能多的石子堆,以确保始终是先手的 Artem 输掉游戏。 对于每个回合: 1. 确定 Ruslan 可以移除的最大石子堆数量; 2. 计算达到最大移除数量的方法数,并输出其对 $ 998\,244\,353 $ 取模的结果。 若两种移除方法在某个索引 $ i $ 上存在区别,即一种方法移除了该索引对应的堆而另一种没有,则视为两种不同的方法。若 Ruslan 无法确保 Artem 输掉某回合,则输出 -1。

输入格式

第一行包含两个整数 $ n $ 和 $ q $($ 1 \le n, q \le 10^5 $),分别表示数组的大小和需要计算结果的区间数。 第二行是 $ n $ 个整数 $ a_1, a_2, \dots, a_n $($ 0 \le a_i \le 50 $),表示初始数组中的元素。 接下来的 $ q $ 行中,每行包含两个整数 $ l_i, r_i $($ 1 \le l_i \le r_i \le n $),定义第 $ i $ 个回合中要进行操作的区间。

输出格式

对于每个回合: - 如果 Ruslan 能赢,输出两个整数——可以移除的最大堆数及其对应的移除方案数量(对 $ 998\,244\,353 $ 取模); - 否则输出 -1。 **本翻译由 AI 自动生成**