集合nim(C++)

2023-10-31

题目

给定 n 堆石子以及一个由 k 个不同正整数构成的数字集合 S。

现在有两位玩家轮流操作,每次操作可以从任意一堆石子中拿取石子,每次拿取的石子数量必须包含于集合 S,最后无法进行操作的人视为失败。

问如果两人都采用最优策略,先手是否必胜。

输入格式

第一行包含整数 k,表示数字集合 S 中数字的个数。

第二行包含 k 个整数,其中第 i 个整数表示数字集合 S 中的第 i 个数 si。

第三行包含整数 n。

第四行包含 n 个整数,其中第 i 个整数表示第 i 堆石子的数量 hi。

输出格式

如果先手方必胜,则输出 Yes

否则,输出 No

数据范围

1≤n,k≤100,
1≤si,hi≤10000

输入样例:

2
2 5
3
2 4 7

输出样例:

Yes

思想

mex()函数mex({1,2,3})

输出集合中不存在的最小自然数,此时输出0

sg()函数,

 最终状态,sg(终点)=0,必败态

下面这个图是一个演示过程,此时只有一堆石子,个数为10,每次只能取2或5,画出状态图

然后红颜色标注的为sg函数值 ,最终得出此时为必胜态

当有多堆石子时,只需求出每堆的sg值,并异或起来就是结果。若为0则为必败态,若为非0则为必胜态,证明与nim游戏相同 

算法

#include<iostream>
#include<unordered_set>
#include<cstring>

using namespace std;

const int N = 110, M = 1e4 + 10;
int s[N], f[M]; //每次取石子的个数  石子堆的数量  

int n, m;

int sg(int x)
{
	if(f[x] != -1) return f[x];
	
	unordered_set<int> S;
	
	for(int i = 0; i < n; i ++)
	{
		int sum = s[i];
		if(x >= sum)S.insert(sg(x - sum));
	}
	
	for(int i = 0; ; i ++)
		if(!S.count(i))
			return f[x] = i;
}

int main()
{
	cin >> n;
	for(int i = 0; i < n; i ++)cin >> s[i];
	
	cin >> m;
	
	memset(f, -1, sizeof f);
	
	int res = 0;
	for(int i = 0; i < m; i ++)
	{
		int x;
		cin >> x;
		res ^= sg(x); 
	}
	
	if(res)puts("Yes");
	else puts("No");
	
	return 0;
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

集合nim(C++) 的相关文章

随机推荐

  • 在linux命令下如何访问一个url?

    1 elinks lynx like替代角色模式WWW的浏览器 例如 elinks dump http www baidu com 2 wget 这个会将访问的首页下载到本地 root el5 mq2 wget http www baidu
  • cargo 编译 rust 错误解决方法

    项目中一个代码库 之前编译是没有问题 最近出来新的错误 rust sudo make cd rust usr bin python gen c headers py CARGO TARGET DIR home ics liuys dsa d
  • python中open()与codecs.open()的区别

    最初的时候 只有open 函数 由于Python2中 编码的冗杂性 所以就有了codecs open 至于io open 其实是因为Python 2的open实际上是file模块提供的 而Python 3的open是io模块提供的 然后 P
  • _pickle.UnpicklingError: A load persistent id instruction was encountered,but no persistent_load fu

    错误如图所示 出错原因 通常问题出现在测试和验证阶段 错误原因 模型训练使用的pytorch和测试验证使用的pytorch不是同一个版本 解决办法 在同一环境下进行模型的训练和测试 对两个环境安装相同的pytorch版本
  • Webrtc从理论到实践九: 官方demo源码走读(peerconnection_client)(下)

    系列文章目录 Webrtc从理论到实践一 初识 Webrtc从理论到实践二 架构 Webrtc从理论到实践三 角色 Webrtc从理论到实践四 通信 Webrtc从理论到实践五 编译webrtc源码 Webrtc从理论到实践六 Webrtc
  • Linux中gcc的详解用法及其可重定位目标文件

    1 gcc组成 gcc是一组编译工具的总称 包括 C编译器 C 编译器 源码预处理程序和库文件 2 gcc编译 1 生成一个程序 gcc hello c o hello 把hello c编译成一个可执行程序 如果gcc hello c 不指
  • 第五届模式识别与人工智能国际会议-PRAI 2022

    第五届模式识别与人工智能国际会议 PRAI 2022 将于2022年8月19 21日在四川成都召开 PRAI 2022 本次会议由成都理工大学主办 IEEE 上海交通大学 天津大学 电子科技大学 西安微电子技术研究所 四川轻化工大学 江苏大
  • 有什么不违法却赚钱的野路子?

    昨天音乐账号挣了561多 无需才艺不用露脸 方法分享给大家 赶紧收藏起来 只需要找到近期热度比较高的歌曲 搜集各个爆火的翻唱版本 将它们拼剪成一个视频发布到今日头条上面 只要视频有播放量 今日头条就会给你收益 一万的播放量可以获得几十块钱不
  • 指令延迟隐藏

    一 指令延迟隐藏 1 延迟和延迟隐藏 指令延迟指计算指令从调度到指令完成所需的时钟周期 如果在每个时钟周期都有就绪的线程束可以被执行 此时GPU处于满符合状态 指令延迟被GPU满负荷计算状态所掩盖的现象称为延迟隐藏 延迟隐藏对GPU编程开发
  • 安装docker报错

    安装docker报错如下 解决办法 rm f var run yum pid
  • Kubernetes -K8S安装部署及SpringCloud应用

    k set image deploy kubia nodejs luksa kubia v2 一 Kubernetes 一键安装Kubernetes集群 集群方案 使用三台物理机或VMware虚拟机来搭建集群环境 一台主控服务器 两台工作节
  • 微信报错:40001: invalid credential, access_token is invalid or not latest rid: xxx(附带存储access_token代码)

    我使用的是redis作为存储服务器 来存储access token 代码亲测没有任何问题 在做微信公众号模板推送的时候用到了access token 但是有时推送成功 有时失败 报错显示为 40001 invalid credential
  • unity中vs编辑代码时没有自动补全的解决方案之一

    点击 unity编辑器中的 Edit选项 gt preferences gt External Tools 把选项改成这个就ok
  • Lambda 实战-集合分组统计

    package com lingoace edu util import lombok Data import java util ArrayList import java util List import java util LongS
  • ◆考试题目◆◇NOIP模拟赛◇turtle(乌龟)

    NOIP模拟赛 turtle Description 一只乌龟由于智商低下 它只会向左或向右走 不过它会遵循主人小h的指令 F 向前走一步 T 掉头 现在小h给出一串指令 由于小h有高超的计算能力 他可以马上知道乌龟最后走到哪里 为了难倒小
  • bitlocker 恢复密钥

    开机出现问题 需要bitlocker 恢复密钥 登录Microsoft官网自己的账号 我的Microsoft账户 有问题电脑的详细信息 登录 找到对应密钥填入
  • STANet基于时空自注意力的神经网络--变化检测模型

    STANet基于时空自注意力的神经网络检测模型 A spatial temporal attention based method and a new dataset for remote sensing image change dete
  • C#----使用继承选择器创建继承窗体

    欢迎大家提出意见 一起讨论 转载请标明是引用于 http blog csdn net chenyujing1234 代码 VS2008 http www rayfile com zh cn files 68b23066 9aab 11e1
  • mos管驱动电路设计

    对于开关电源来说 驱动电路作为控制电路和功率电路的接口 其作用至关重要 本文就将详细探讨开关电源的驱动电路的参数设计以及驱动芯片的选型 常用的mos管驱动电路结构如图1所示 驱动信号经过图腾柱放大后 经过一个驱动电阻Rg给mos管驱动 其中
  • 集合nim(C++)

    题目 给定 n 堆石子以及一个由 k 个不同正整数构成的数字集合 S 现在有两位玩家轮流操作 每次操作可以从任意一堆石子中拿取石子 每次拿取的石子数量必须包含于集合 S 最后无法进行操作的人视为失败 问如果两人都采用最优策略 先手是否必胜