有一种有趣的游戏,玩法如下:
玩家:2人;
道具:N堆石子,每堆石子的数量分别为X1,X2,...,XnX_1,X_2,...,X_nX1,X2,...,Xn;
规则:
- 游戏双方轮流取石子;
- 每人每次选一堆石子,并从中取走若干颗石子(至少取1颗);
- 所有石子被取完,则游戏结束;
- 如果轮到某人取时已没有石子可取,那此人算负。
假如两个游戏玩家都非常聪明,问谁胜谁负?
输入描述:第一行,一个整数N; 第二行,N个空格间隔的整数XiX_iXi,表示每一堆石子的颗数。输出描述:
输出仅一行,一个整数,若先手获胜输出win,后手获胜输出lose。
示例1
输入复制4 7 12 9 15
4 7 12 9 15输出
复制win
win备注:
对于全部数据,N≤5×104,1≤Xi≤105N leq 5 times10^4,1 leq X_i leq 10^5N≤5×104,1≤Xi≤105
题目思路:该题为尼姆博弈的模板题,无任何改变,将输入的数据从1~n异或,如果异或结果为1,则先手胜,反之,后手胜。
尼姆博弈:有任意堆物品,每堆物品的个数是任意的,双方轮流从中取物品,每一次只能从一堆物品中取部分或全部物品,最少取一件,取到最后一件物品的人获胜。
代码如下:
#include
using namespace std;
int a[52005];
int n;
int main(){
int res=0;
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i];
}
res=a[1];
for(int i=2;i<=n;i++)
{
res=res^a[i];
}
if(res==0) printf("lose");
else
{
printf("win");
}
return 0;
}



