5511: Nim博弈(nim)
Memory Limit:512 MB
Time Limit:1.000 S
Judge Style:Text Compare
Creator:
Submit:0
Solved:0
Description
Alice 和 Bob 又在玩取石子游戏了。这一回的规则如下:
游戏双方轮流从若干个石堆中取石子,每个石堆的数量不一定相同。每人每次只能选取一堆,从中取石子,并且从中取走至少 1 颗,数量任选(当然也不可能超过石堆中剩余石子个数)。
如果某人无石子可取,则算负。
假如 Alice 和 Bob 总是聪明绝顶,总会使用最优的策略。求先手玩家 Alice 是否必胜?
上述博弈模型是经典的 Nim 博弈。Nim 博弈的法则是:当对剩余所有石子求异或和的结果是 0 时,当前玩家必败,反之则必胜。
Input
输入的第一行包含二个正整数n和m,分别表示输入的数列长度和操作的数量。
第二行包含n个正整数,第i项表示数列第i个元素的值a_i。
接下来m行,每行为一条操作,格式为下列三种之一:
操作 1: xor x y k,表示把数列的第x项到第y项每一项异或(⊕)k。
操作 2: set x k,表示把数列的第x项的值改为k。
操作 3: game x y,表示把数列的第x项到第y项当作游戏开始时的所有石堆,求出先手玩家 Alice 是否必胜和 Alice 第一步可以选择取走石子的石堆数。
Output
输出若干行,即每次操作 3 的结果,当 Alice 先手玩家必胜时,输出true,空一格后输出第一步可以选择取走石子的石堆数。
当 Alice 必败时,输出false即可。
Sample Input Copy
9 12
2 9 12 11 2 1 3 15 13
game 5 7
xor 1 4 3
game 6 9
game 3 4
set 2 6
xor 2 8 1
set 1 4
xor 9 9 11
xor 5 6 1
game 4 5
set 4 15
game 2 7
Sample Output Copy
false
false
true 1
true 1
true 3
HINT
对于所有测试数据有:1<=n, m<=2*10^5, 1<=x<=y<=n, 0<=a_i, k<=2024