SSOJ2944取石子游戏2
1594+
作者:crxis 发布:2022-03-11 分类:博弈论
题目大意:2个人取n堆石子,每次可以选一堆石子取若干颗,取不到石子的算输,请问先手是否必胜?
有一种有趣的游戏,玩法如下:
玩家: $2$ 人;
道具: $N$ 堆石子,每堆石子的数量分别为 $X_1, X_2,…,X_n$ ;
规则:
1、游戏双方轮流取石子;
2、每人每次选一堆石子,并从中取走若干颗石子(至少取 $1$ 颗);
3、所有石子被取完,则游戏结束;
4、如果轮到某人取时已没有石子可取,那此人算负。
假如两个游戏玩家都非常聪明,问谁胜谁负?
【输入】
第一行,一个整数 $N$;
第二行, $N$ 个空格间隔的整数 $X_i$ ,表示每一堆石子的颗数。
【输出】
输出仅一行,一个整数,若先手获胜输出 $win$,后手获胜输出 $lose$。
【输入样例】
4 7 12 9 15
【输出样例】
win
【提示】
数据范围与提示:
对于全部数据, $N≤5×10^4 ,1≤X_i ≤10^5$ 。
解题思路
结论:n堆石子数量的异或和非零先手必胜,否则先手必败。
解释:异或和非零,总能取到异或和为0;异或和为0,取石子后,异或和必定非零。
证明:异或和为0,取石子后,显然异或和非零。异或和非零,异或和最高位的1是单出来的,我们取包含那个1的那堆石子,让其数量等于其他数字的异或和即可(其他数字异或和必然小于这个数字、这个1的值)。
原来是这样用的 😉