博弈论专题一(NIM游戏)

news2024/12/28 18:26:06

Nim游戏

重点结论:对于一个Nim游戏的局面(a1,a2,...,an),它是P-position当且仅当a1^a2^...^an=0,其中^表示位异或(xor)运算。

(本篇只做简单的结论描述,详细证明过程请看这篇博客)

Nim和

 堆物品,每堆 ai 个,两个玩家轮流取走任意一堆的任意个物品,但不能不取,取走最后一个物品的人获胜。

结论:

定义 Nim 和 =ai⊕a2⊕⋯an

当且仅当 Nim 和为 0 时,先手必败,反则先手必胜。

简单证明:

三个定理

  1. 没有后继状态的状态是必败状态。
  2. 一个状态是必胜状态当且仅当存在至少一个必败状态为它的后继状态。
  3. 一个状态是必败状态当且仅当它的所有后继状态均为必胜状态。

例题:

一.P2197 【模板】Nim 游戏

 题目思路:Nim游戏的板子题,可以直接套出结论,Nim 和 =ai⊕a2⊕⋯an当且仅当 Nim 和为 0 时,先手必败,反则先手必胜。

 代码实现:

#include<bits/stdc++.h>
#define N 1000005
using namespace std;
typedef long long ll;
ll a, b, c, n, m, t;
ll f[N], dp[N];
ll ans;
int main() 
{
	cin >> t;
	while (t--) {
		ans = 0;
		cin >> n;
		for (int i = 1; i <= n; i++){
			cin >> f[i];
			ans = ans ^ f[i];
		}
		if (ans) cout << "Yes" << endl;
		else cout << "No" << endl;
	}
	return 0;
}

 

二.P1247 取火柴游戏

 

思路:

本题和Nim板子题很像,但是,多了一个输出先手必赢的第一次操作,及其结果.先手必胜,即先手可以拿走一些火柴,使得后手必败,而必败态是火柴堆的异或和为零;那么我们求的,就是先手拿走一些火柴后,新的火柴堆异或和为零的方案.

代码实现:

#include<bits/stdc++.h>
using namespace std;
#define N 2000005
typedef long long ll;
ll n, m, t, a, b, c;
ll f[N], dp[N];
ll ans, maxx, minn = 1e9;
int main()
{
	cin >> n;
	for (int i = 1; i <= n; i++) cin >> f[i];
	for (int i = 1; i <= n; i++) {
		ans = ans ^ f[i];
	}
	if (ans) {
		for (int i = 1; i <= n; i++) {
			if ((ans ^ f[i]) >= f[i]) continue;
			cout << (f[i] - (ans ^ f[i])) << " " << i << endl;
			f[i] =ans ^ f[i];
			break;
		}
		for (int i = 1; i <= n; i++)
			cout << f[i] << " ";
		cout << endl;
	}
	else {
		cout << "lose" << endl;
	}
	return 0;
}

 

三.P7589 黑白棋(2021 CoE-II B)

题目思路:

一个 nim 游戏,双方还可以选择每次给每堆石子 +d 个,每人可以添加 k 次。问先手能否获胜。发现一旦先手必胜,后手每添加 d 个,先手都可以选择减少 d 个,而添加次数有限,所以先手必胜。后手同理。

代码实现:

#include<bits/stdc++.h>
using namespace std;
#define N 2000005
typedef long long ll;
ll n, m, t, a, b, c, k, d;
ll f[N], dp[N];
ll ans, maxx, minn = 1e9;
int main()
{
	cin >> t;
	while (t--) {
		ans = 0;
		cin >> n >> k >> d;
		for (int i = 1; i <= n; i++) {
			cin >> a >> b >> c;
			ans ^= abs(b - c) - 1;
		}
		if (ans) cout << "Yes" << endl;
		else cout << "No" << endl;
	}
	return 0;
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2129827.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux系统:chown命令

1、命令详解&#xff1a; chown命令用于设置文件所有者和文件关联组的命令&#xff0c;全称为change directory。在Linux当中默认文件均有拥有者&#xff0c;可以利用 chown 将指定文件的拥有者改为指定的用户或组&#xff0c;输入参数时用户可以是用户名或者用户 ID&#xff0…

零基础如何学会Appium自动化测试?

前言 appium是一款移动自动化测试工具&#xff0c;经常被用于实现UI自动化测试&#xff0c;其可支持安卓和IOS两大平台&#xff0c;还支持多种编程&#xff0c;因而得到了广泛的应用。此处便是立足于安卓平台&#xff0c;借助appium工具&#xff0c;使用python语言实现简单的自…

GUI编程09:鼠标监听事件、模拟画图工具

视频链接&#xff1a;11、鼠标监听事件、模拟画图工具_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1DJ411B75F?p11&vd_sourceb5775c3a4ea16a5306db9c7c1c1486b5 模拟画图工具的实现逻辑图&#xff1a; 实现代码&#xff1a; package com.yundait.lesson03;impo…

大模型分离架构学习记录

GPU Direct GPU 网络的情况已经发生了很大变化。每个 GPU 都有自己的内部互联&#xff0c;例如 NVIDIA 的 A100 或 H800&#xff0c;它们内部的 NVLink 互联可以达到 600GB 甚至 900GB。这种内部互联与外部以太网网络集群设计之间存在耦合关系。GPU 是单机多网卡的&#xff0c…

Mini打印机复刻过程(外设绘制)

充电管理 充电管理模块采用ME4054BM5G-N 典型应用电路 ME4054B-N的典型应用电路中&#xff0c;输入为4.5V-6.5V&#xff0c;用于给4.2V的锂电池充电。关键元件包括&#xff1a; LED指示灯&#xff1a;通过1kΩ电阻限流&#xff0c;显示充电状态。2kΩ电阻&#xff08;PROG引脚…

视频孪生市场有望达千亿级

近日&#xff0c;中国互联网协会数字孪生技术工委会副主任委员、智汇云舟创始人兼总裁周舟对数字孪生技术的市场潜力与发展前景进行了深度剖析。她表示&#xff0c;在国家政策与全球数字化转型的双重推动下&#xff0c;数字孪生技术发展迅速&#xff0c;市场潜力巨大&#xff0…

如何将任何文本语料转换为知识图谱?

转自&#xff1a;吴建明利驰软件 几个月前&#xff0c;基于知识的问答系统&#xff08;Knowledge Base Question Answering&#xff0c;KBQA&#xff09;还是个新概念。 现在&#xff0c;随着大型语言模型&#xff08;LLMs&#xff09;的发展&#xff0c;带有检索增强生成&am…

实用类工具!目前5款很火的AI写论文网站测评

在当今科技飞速发展的时代&#xff0c;人工智能&#xff08;AI&#xff09;技术已经深入到各个领域&#xff0c;包括学术研究和论文写作。AI论文写作工具的出现极大地提高了写作效率&#xff0c;帮助学者们快速生成高质量的论文内容。以下是五款非常受欢迎且功能强大的AI论文写…

MySQL零基础入门教程-8.1 表的连接\增删数据、表结构的增删改、字段约束(非空、唯一性、主键、外键、检查约束),基础+实战

教程来源&#xff1a;B站视频BV1Vy4y1z7EX 001-数据库概述_哔哩哔哩_bilibili 我听课收集整理的课程的完整笔记&#xff0c;供大家学习交流下载&#xff1a;夸克网盘分享 本文内容为完整笔记的第八篇的第一部分 目录 1、表怎么进行连接的 2、insert语句可以一次插入多条记…

深入探索 Ubuntu:从基础到高级应用

本文深入探讨了 Ubuntu 操作系统&#xff0c;涵盖了其起源与发展、安装与配置、软件管理、系统优化、网络配置、安全防护以及在不同领域的应用等多个方面。 在起源与发展部分&#xff0c;介绍了 Ubuntu 于 2004 年创立的背景以及其版本的演进。安装与配置环节详细阐述了系统安…

SprinBoot+Vue药房管理系统的设计与实现

目录 1 项目介绍2 项目截图3 核心代码3.1 Controller3.2 Service3.3 Dao3.4 application.yml3.5 SpringbootApplication3.5 Vue 4 数据库表设计5 文档参考6 计算机毕设选题推荐7 源码获取 1 项目介绍 博主个人介绍&#xff1a;CSDN认证博客专家&#xff0c;CSDN平台Java领域优质…

R语言论文插图模板第10期—正负柱状图

在之前的文章中&#xff0c;分享了R语言各式柱状图的绘制模板&#xff1a; 进一步&#xff0c;再来分享一种特殊的柱状图&#xff1a;正负柱状图。 先来看一下成品效果&#xff1a; 特别提示&#xff1a;本期内容『数据代码』已上传资源群中&#xff0c;加群的朋友请自行下载。…

改进三极管搭建的简易电流源特性

目录 一、用三极管搭建简易电流源的缺点二、改进电流源特性 一、用三极管搭建简易电流源的缺点 此前文章《用三极管搭建电流源》的电路是存在缺陷的&#xff0c;温度变化和Early效应会影响电路的性能和稳定性。主要表现如下&#xff1a; 基极-发射极之间的压降会随着温度的变化…

AI性能评估工具 | 安兔兔AI大模型评测 v1.0.0.1095

安兔兔AI大模型评测是一款性能评估软件&#xff0c;专注于对设备在CPU、GPU及专属AI加速器上的AI处理能力进行全方位测试与评估。该软件精确评估设备的AI计算能力&#xff0c;助力用户深入理解设备在执行AI任务时的表现。 借助评测数据&#xff0c;用户能够清晰地掌握设备的AI…

【机器学习导引】ch2-模型评估与选择

文章目录 经验误差与过拟合 &#xff08;Empirical error &overfitting&#xff09;1. **均方误差&#xff08;Mean Squared Error, MSE&#xff09;**2. **均方根误差&#xff08;Root Mean Squared Error, RMSE&#xff09;**3. **平均绝对误差&#xff08;Mean Absolute…

虚拟存储器“大观”,讲解核心逻辑知识和408大题方法

虚拟存储器 写在前面&#xff1a;虚拟存储器&#xff08;Virtual Memory&#xff09;是计算机系统中用于管理内存的一种技术&#xff0c;它通过虚拟地址空间为进程提供比物理内存更大的地址空间&#xff0c;同时实现内存保护和进程隔离。 在408整个体系中计组和操作系统都有涉…

飞书项目管理使用攻略

文章目录 项目管理项目管理的方法和工具项目管理方法&#xff1a;项目管理工具 飞书项目管理平台 创建空间需求管理缺陷管理人员排期飞书也可以创建敏捷开发管理. 项目管理 项目管理是指在项目活动中运用专门的知识、技能、工具和方法&#xff0c;使项目能够在有限资源限定条件…

自动化立体仓库定义及使用范围

导语 大家好&#xff0c;我是社长&#xff0c;老K。专注分享智能制造和智能仓储物流等内容。 新书《智能物流系统构成与技术实践》人俱乐部 这份文件是关于自动化立体仓库的定义、发展、组成、技术性能、应用领域、供货方式以及设计步骤的详细介绍。以下是核心内容的概要&#…

基于Qt的自定制WPS

前言 正文 项目实现&#xff1a;项目实现了文件的新建&#xff0c;打开&#xff0c;保存&#xff0c;另存为&#xff0c;以及字体的设置&#xff0c;字体加粗&#xff0c;字体倾斜&#xff0c;字体颜色&#xff0c;还有对齐方式等功能 项目效果&#xff1a; ​ 项目地址&…

企业微信应用消息收发实施记录

一、前置配置 1.1 进入我的企业页面&#xff0c;记录下企业ID。 1.2 创建企微应用&#xff0c;记录下应用的 AgentId 和 Secret。 1.3 设置应用的企业可信IP&#xff0c;将服务器公网 IP 填入即可。 1.4 设置应用接收消息API 填入服务器 API 地址&#xff0c;并记录下随机获取…