第 2 届河北省大学生程序设计竞赛(河北省赛)-Problem B. Nim Game-题解
Posted Tisfy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第 2 届河北省大学生程序设计竞赛(河北省赛)-Problem B. Nim Game-题解相关的知识,希望对你有一定的参考价值。
传送门
Problem A. Mex Query
Problem B. Nim Game
Problem C. icebound 的账单
Problem G. 520
Problem H. 神殿
Problem J. icebound 的商店
Problem K. Bitmap
哈希讲解
二维哈希讲解
Problem L. 跑图
文章目录
Problem B. Nim Game
Time Limit: 2000ms
Memory Limit: 65536KB
Description
Nim is a mathematical game of strategy in which two players take turns removing objects from distinct heaps. On each turn, a player must remove at least one object, and may remove any number of objects provided they all come from the same heap [From Wikipedia, the free encyclopedia]. The goal of the game is to avoid being the player who doesn’t have any
object to remove. The player who remove the last project is the winner.
Now KK and TT are playing Nim game with the optimal strategy. There are n n n heaps of stones. The number of stones in i i i-th heap is a i a_i ai. They play this game m m m times, and KK is the player making the first move. During the i i i-th time they play the game on the heaps whose index in interval [ l i l_i li, r i r_i ri]. KK wants to know whether he has a winning strategy or not
Input
The input consists of several test cases. The first line of the input gives the number of test cases, T ( 1 ≤ T ≤ 1 0 3 ) T(1\\leq T\\leq 10^3) T(1≤T≤103).
For each case, the first line contains two integers n ( 1 ≤ n ≤ 1 0 6 ) n(1\\leq n\\leq 10^6) n(1≤n≤106)and m ( 1 ≤ m ≤ 1 0 6 ) m(1\\leq m\\leq 10^6) m(1≤m≤106), representing the number of heap of stones and the game times.
The second line contains n n n positive integers a 1 , a 2 , ⋯ , a n ( 1 ≤ a i ≤ 1 0 9 ) a_1,a_2,\\cdots,a_n(1\\leq a_i\\leq 10^9) a1,a2,⋯,an(1≤ai≤109), representing the number of stones in i i i-th heap.
In the next m m m lines, each line contains two integers l i l_i li, r i r_i ri, which means the i i ith game is played on the interval [ l i l_i li, r i r_i ri].
It’s guaranteed that ∑ n ≤ 2 × 1 0 6 \\sum n\\leq 2\\times 10^6 ∑n≤2×106.
Output
For each test case, let
f
i
f_i
fi represents the answer of the
i
i
ith game. If KK has a winning strategy in the
i
i
ith game then
f
i
=
1
f_i= 1
fi=1 , otherwise
f
i
=
0
f_i=0
fi=0 .
Please output
∑
f
i
∗
2
m
−
i
m
o
d
1
0
9
+
7
\\sum f_i*2^{m-i}mod\\ 10^9+7
∑fi∗2m−imod 109+7,in which
1
≤
i
≤
m
1\\leq i \\leq m
1≤i≤m.
Sample Input
3
2 1
1 1
1 2
2 1
1 2
1 2
3 2
1 2 2
1 2
2 3
Sample Output
0
1
2
题目大意
每次游戏有一些石头( n n n堆),给你每堆石头的数量,两人轮流开始游戏。
每人可以拿走一堆石头中的任意数量,拿走最后一颗石头的人获胜。
假如两人都足够聪明,问先手赢还是后手赢。
输入描述
第一行一个正整数 T T T,代表一共 T T T组测试样例,对于每组测试样例:
第一行两个正整数 n n n、 m m m,代表有 n n n堆石头 完 m m m次游戏。
第二行 n n n个正整数,分别代表这 n n n堆石头的石头数量
接下来有 m m m行,对于每行:有两个正整数 l l l和 r r r,代表这次游戏的范围是第 l l l~ r r r堆石头。
输出描述
每组测试样例有 m m m次游戏,对于每次游戏:
先手赢记为 1 1 1,后手赢记为 0 0 0。
这 m m m次游戏的加权计算方式为: ∑ f i ∗ 2 m − i m o d 1 0 9 + 7 \\sum f_i*2^{m-i}mod\\ 10^9+7 ∑fi∗2m−imod 109+7,让你输出这个值。
解题思路
如果你之前
玩过Nim游戏(做过Nim的题),那么你应该知道,若 n n n堆石子的数量异或结果为 0 0 0,则先手败,否则先手胜。
不知道为什么的可以点击这里参考
知道之后,这一题就变成了前缀了。
每次询问 l l l到 r r r,每次都从 l l l异或到 r r r肯定超时,因此我们选择使用数组 p r e f i x prefix prefix来辅助。
p r e f i x [ i ] prefix[i] prefix[i]表示前 i i i个数的异或结果为 p r e f i x [ i ] prefix[i] prefix[i]。
这样,从 l l l到 r r r的异或结果为: p r e f i x [ r ] prefix[r] prefix[r] ^ p r e f i x [ l − 1 ] prefix[l-1] prefix[l−1]。证明如下:我们把从 0 0 0到 r r r看成两部分,一部分是从 0 0 0到 l − 1 l-1 l−1,它们的异或结果为 A A A;另一部分是从 l l l到 r r r,它们的异或结果为 B B B。则 p r e f i x [ l − 1 ] = A , p r e f i x [ r ] = A prefix[l-1]=A,prefix[r]=A prefix[l−1]=A,prefix[r]=A ^ B B B。
现在已知 A A A ^ 以上是关于第 2 届河北省大学生程序设计竞赛(河北省赛)-Problem B. Nim Game-题解的主要内容,如果未能解决你的问题,请参考以下文章第 2 届河北省大学生程序设计竞赛(河北省赛)-Problem G. 520-题解
第 2 届河北省大学生程序设计竞赛(河北省赛)-Problem K. Bitmap-题解
第 2 届河北省大学生程序设计竞赛(河北省赛)-Problem C. icebound 的账单-题解
第 2 届河北省大学生程序设计竞赛(河北省赛)-Problem J. icebound 的商店-题解