当前位置:首页 > 数学 > 博弈论 > 正文
SSOJ2944取石子游戏2
112+

题目大意: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的值)。

程序实现

About

坚决不Copy代码!

本文标签:,,,,,,,

报歉!评论已关闭.