栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

取石子游戏--尼姆博弈

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

取石子游戏--尼姆博弈


 

题目描述

有一种有趣的游戏,玩法如下:
玩家:2人;
道具:N堆石子,每堆石子的数量分别为X1,X2,...,XnX_1,X_2,...,X_nX1​,X2​,...,Xn​;
规则:

  1. 游戏双方轮流取石子;
  2. 每人每次选一堆石子,并从中取走若干颗石子(至少取1颗);
  3. 所有石子被取完,则游戏结束;
  4. 如果轮到某人取时已没有石子可取,那此人算负。

假如两个游戏玩家都非常聪明,问谁胜谁负?

输入描述:
第一行,一个整数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;
}
 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/913653.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号