博弈论(NIM游戏——取石子)相关的题目

news2024/10/5 17:24:38

 

1.异或的性质 

 🏳️‍🌈🏳️‍🌈🏳️‍🌈🏳️‍🌈🏳️‍🌈🏳️‍🌈

2.nim游戏 (基础)

891. Nim游戏 - AcWing题库

给定 n 堆石子,两位玩家轮流操作,每次操作可以从任意一堆石子中拿走任意数量的石子(可以拿完,但不能不拿),最后无法进行操作的人视为失败。

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

输入格式

第一行包含整数 n。

第二行包含 n 个数字,其中第 i 个数字表示第 i 堆石子的数量。

输出格式

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

否则,输出 No

 

例如:有两堆石子,第一堆有2个,第二堆有3个,先手必胜。

操作步骤:
1. 先手从第二堆拿走1个,此时第一堆和第二堆数目相同
2. 无论后手怎么拿,先手都在另外一堆石子中取走相同数量的石子即可。

先手必败状态:a1 ^ a2 ^ a3 ^ ... ^an = 0
先手必胜状态:a1 ^ a2 ^ a3 ^ ... ^an ≠ 0 

#include <iostream>
#include <cstdio>
using namespace std;

/*
先手必胜状态:先手操作完,可以走到某一个必败状态
先手必败状态:先手操作完,走不到任何一个必败状态
先手必败状态:a1 ^ a2 ^ a3 ^ ... ^an = 0
先手必胜状态:a1 ^ a2 ^ a3 ^ ... ^an ≠ 0
*/

int main(){
    int n;
    scanf("%d", &n);
    int res = 0;
    for(int i = 0; i < n; i++) {
        int x;
        scanf("%d", &x);
        res ^= x;
    }
    if(res == 0) puts("No");
    else puts("Yes");
}

 3.nim游戏(变形)

892. 台阶-Nim游戏 - AcWing题库

现在,有一个 n 级台阶的楼梯,每级台阶上都有若干个石子,其中第 i 级台阶上有 ai 个石子(i≥1)。

两位玩家轮流操作,每次操作可以从任意一级台阶上拿若干个石子放到下一级台阶中(不能不拿)。

已经拿到地面上的石子不能再拿,最后无法进行操作的人视为失败。

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

输入格式

第一行包含整数 n。

第二行包含 n 个整数,其中第 i 个整数表示第 i 级台阶上的石子数 ai

输出格式

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

否则,输出 No

 此时我们需要将奇数台阶看做一个经典的Nim游戏,如果先手时奇数台阶上的值的异或值为0,则先手必败,反之必胜

 证明:
先手时,如果奇数台阶异或非0,根据经典Nim游戏,先手总有一种方式使奇数台阶异或为0,于是先手留了奇数台阶异或为0的状态给后手
于是轮到后手:
①当后手移动偶数台阶上的石子时,先手只需将对手移动的石子继续移到下一个台阶,这样奇数台阶的石子相当于没变,于是留给后手的又是奇数台阶异或为0的状态

②当后手移动奇数台阶上的石子时,留给先手的奇数台阶异或非0,根据经典Nim游戏,先手总能找出一种方案使奇数台阶异或为0

只异或奇数的,不异或偶数的,因为最后要把石子都放到地面,地面是第0层(偶数层,如果算上地面的,也许会多一层,个人理解)

#include <iostream>
using namespace std;

int main()
{
    int res = 0;
    int n;
    cin >> n;

    for(int i = 1 ; i <= n ; i++)
    {
        int x;
        cin >> x;
        if(i % 2==1) res ^= x;//只异或奇数的
    }

    if(res==0) puts("No");
    else puts("Yes");
    return 0;
}

 ⭐⭐⭐代码中,先都异或了一遍,然后把

修改的位置的原来的数修改了的数又异或了一遍

刚开始以为这不是重复了吗

其实不是,以为相同的数异或为0,0异或任何数还为原数

那么 修改的位置的原来的数异或后是0,并不影响

#include<bits/stdc++.h>
#define int long long 
using namespace std;
const int N = 1e5+5;

int a[N];

signed main(){
    int n,q,x,y;
    cin>>n>>q;
    
    int sum = 0;
    for(int i=1;i<=n;i++){
        cin>>a[i];
        sum^=a[i];
    }
    
    while(q--){
        cin>>x>>y;
        sum^=a[x];
        sum^=y;
        a[x] = y;
        if(sum!=0){
            cout<<"Kan"<<endl;
        }
        else{
            cout<<"Li"<<endl;
        }
    }
    
    return 0;
}

Code over!

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

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

相关文章

直播软件app开发:如何处理直播延迟问题?

随着直播技术的发展&#xff0c;直播软件app的开发变得越来越普遍。然而&#xff0c;直播延迟问题一直是直播软件app开发中的一个挑战。在本文中&#xff0c;我们将探讨如何解决直播延迟问题&#xff0c;提高用户体验。 直播延迟的原因 直播延迟的原因是多方面的。其中最主要…

【Mycat2】介绍、安装、部署、配置、测试与 Bugs

文章目录 一、MyCat 概览1.1 简介1.2 官网网址1.3 仓库地址1.4 Mycat1.x 与 Mycat2 功能对比1.5 下载1.5.1 先决条件1.5.2 Mycat2 安装包&#xff08;以下二选一&#xff09; 1.6 Mycat2权威指南1.7 原型库什么是兼容性 SQL&#xff1f;什么是 Prototype 服务器&#xff1f;原型…

shell第二次作业

一、编写脚本for1.sh使用for循环创建20账户&#xff0c;账户名前缀由用户从键盘输入&#xff0c;账户初始密码由用户输入。 1、创建脚本for1.sh [rootlocalhost ~]# vim for1.sh2、编辑脚本内容 3.运行 [rootlocalhost ~]# bash for1.sh 请用户输入账户名的前缀&#xff1a…

WPS AI 再次引爆办公软件行业,以后写文档可由AI代笔

国内外办公软件两大巨头聚齐&#xff0c;使用AI助力再次成标配。 2023年3月16日&#xff0c;微软发布了 Microsoft 365 Copilot&#xff0c;Microsoft 365 这个名字听起来比较陌生&#xff0c;它集成了Office 365 企业版、Windows 10 企业版以及企业移动性安全性&#xff0c;以…

基于Jira的持续交付流水线实践方式

点击上方蓝字⭐️关注“DevOps云学堂”&#xff0c;接收最新技术实践 今天是「DevOps云学堂」与你共同进步的第 19 天 DevOps 为什么很重要&#xff1f; 软件和 Internet 改变了我们身处的世界&#xff0c;同时也改变了购物、娱乐、银行等行业的运营方式。软件不再仅仅是为业务…

【unity项目实战】3DRPG游戏开发03—— 绘制low poly风格的场景

搭建场景 拖入一颗树,按住V键,表示顶点吸附,点击树的底部,他就会自动吸附到相邻的平面上了 如果你的摄像机位置不是很好,我们可以场景移动到合适的位置,可以点击摄像机,按下键盘ctrl+shift+F同步调整摄像机位置 绘制low poly风格的环境 安装Ploybrush插件,并导入样…

linux安装南大通用数据库 GBase 8s V8.8

linux安装南大通用数据库 GBase 8s V8.8 1、操作系统、数据库2、下载链接3、安装文档4、安装前准备4.1、以root用户创建 gbasedbt 组和用户4.2、创建 GBase 8s 数据库安装目录4.3、上传并解压安装包 5、安装5.1、执行安装程序5.2、回车继续 直到接受许可条款5.3、输入安装目录绝…

Windows安装使用Redis,redis基本使用教程,python连接调用redis

文章目录 下载&#xff1a;安装&#xff1a;redis安装成Windows服务&#xff1a;修改密码&#xff1a;客户端连接&#xff1a;基本使用&#xff1a;python里调用redis&#xff1a; 下载&#xff1a; https://github.com/microsoftarchive/redis/releases/tag/win-3.2.100 安装…

机器学习:基于多项式贝叶斯对蘑菇毒性分类预测分析

基于多项式贝叶斯对蘑菇毒性分类预测分析 作者&#xff1a;i阿极 作者简介&#xff1a;Python领域新星作者、多项比赛获奖者&#xff1a;博主个人首页 &#x1f60a;&#x1f60a;&#x1f60a;如果觉得文章不错或能帮助到你学习&#xff0c;可以点赞&#x1f44d;收藏&#x1…

银行数字化转型导师坚鹏:银行业务数字化创新工作坊

银行业务数字化创新工作坊 课程背景&#xff1a; 很多银行存在以下问题&#xff1a; 不清楚如何进行业务数字化创新&#xff1f; 不知道如何开展银行数字化营销工作&#xff1f; 不知道零售业务数字化创新成功案例&#xff1f; 学员收获&#xff1a; 学习原创银行BLM…

【音视频】国际双向对讲方案

语音对讲的的整体流程为&#xff1a; 先拉流播放设备的视频&#xff1b;使用WebRTC推送语音流到ZLM服务&#xff1b;使用SIP协议下发Broadcast指令给设备&#xff1b;接收到设备的OK指令后&#xff0c;请求ZLM的startSendRtp接口&#xff0c;TCP协议请求startSendRtpPassive接口…

springboot集成webmagic和selenium,并部署到linux(问题坑)

springboot集成webmagic和selenium&#xff0c;并部署到linux&#xff08;问题坑&#xff09; 首先参考两个源代码spring boot集成找不到org.openqa.selenium.remote.AbstractDriverOptions的类文件代理ip--更换一个网页同时更换一个代理ip代理ip网址部署linux谷歌浏览器下载谷…

Python冒泡排序的实现

时间复杂度&#xff1a; 最坏时间复杂度O(n^2) 最优时间复杂度O(n):表遍历一次发现没有任何可以交换的元素&#xff0c;排序结束&#xff0c;这是最理想的 稳定性&#xff1a;稳定&#xff0c;&#xff08;执行前后没有对数据没有变化&#xff0c;位置等&#xff09; 原理和方…

供需两端催化口腔医疗服务市场增长 未来将呈现线上化、智能化、品质化三大趋势

一、口腔医疗服务行业概述 口腔由唇、颊、舌、腭、涎腺、牙和颌骨等部分组成。口腔疾病种类繁多&#xff0c;伴随人全生命周期&#xff0c;常见疾病有龋病、牙周疾病、牙髓病、根尖周病、牙齿缺损、错颌畸形等&#xff0c;多数口腔疾病的发病率高&#xff0c;诊疗需求大。除此…

深度强化学习——策略学习(3)

本文的重点&#xff1a;使用一个神经网络来近似策略函数Π 我们使用一个神经网络来近似策略函数&#xff0c;这个神经网络叫做策略网络&#xff0c;他可以用来控制agent运动&#xff0c;想要训练这个神经网络&#xff0c;就要用到policy gradient算法 策略函数Π的输入是当前…

苹果离开中国制造影响有多大?后果不堪设想,可能是灭顶之灾

由于苹果力推印度制造&#xff0c;各方都对苹果与中国制造的关系高度关注&#xff0c;那么苹果真的离开中国制造的话&#xff0c;结果会如何呢&#xff1f;对双方来说&#xff0c;影响会非常大&#xff0c;超出想象。 一、中国制造对苹果的依赖 苹果对产业链拥有巨大的影响力&a…

Python基础快速入门

一、中文编码问题 带大家过一遍菜鸟学python的基础内容 二、Python基础语法 1、Python 中的标识符是区分大小写的。 以下划线开头的标识符是有特殊意义的。以单下划线开头 _foo 的代表不能直接访问的类属性&#xff0c;需通过类提供的接口进行访问&#xff0c;不能用 from x…

用Socket API建立简易TCP服务端、客户端

//---------------------- //-- 用Socket API建立简易TCP客户端 // 1 建立一个Socket // 2 连接服务器 connect // 3 接收服务器信息 recv // 4关闭套接字 closesocket // -- 用Socket API建立简易TCP服务端 // 1 建立一个socket // 2 bind 绑…

JetBrains Gateway IDEA远程开发

为什么进行远程开发&#xff1f; 无论身处何处数秒内连接至远程环境 充分利用远程计算机的强大功能 在任何笔记本电脑上都可以轻松工作&#xff0c;无论其性能如何。借助远程计算机的计算资源&#xff0c;充分利用最大规模的数据集和代码库。在远程服务器上保护敏感代码 如果…

知识变现海哥|你为什么知识却不富有,是你不懂这个道理

要有价值观念&#xff0c;要有交换思维。商业的本质都是基于价值交换&#xff0c;你能为别人提供多少价值&#xff0c;你就能赚多少米&#xff0c;你帮助别人处理的问题越多你越有价值&#xff0c;你能成就多少人你就能被多少人成就。这是商业行为的底层逻辑。 你没赚到米 一是…