CF2043F.Nim

省选/NOI-

通过率:0%

AC君温馨提醒

该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。

题目描述

重温一下「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 自动生成

输入输出样例

  • 输入#1

    9 5
    0 1 2 1 3 4 5 6 0
    1 5
    2 5
    3 5
    4 5
    1 9

    输出#1

    4 1
    2 1
    0 1
    -1
    8 2

输入解题思路,AI测评打分。不知道怎么写?

首页