博弈论实用原理浅谈及题目实战【算法竞赛】

一、前言

        本篇记录博弈论一些常见原理、做题技巧。

        之前没有了解学习过博弈论,这篇文章可以当作记录学习笔记了。 


 二、初识博弈论

        博弈论题目在竞赛中我感觉其实并不少见,只是需要技巧性很强,找到规律打代码很简单,而找不到基本上做不出来。所以认识一些经典规律题型还是很有必要的。

         博弈嘛,它的题型基本上一眼就看出来是博弈论的题目了,题目基本上都是双人对弈。

        从思路上来看,两个大点就是奇偶和对称。

        从题型上来看,就有很多了,主要的有Nim博弈,SG函数,后面会以标题的形式出现。


先看几个题体会一下:

        1.智乃的数字手串

         思路:考虑最后状态——必定为相邻两数之和皆为奇数(包括首尾项之和),如232323。再分析一下它的特征:一定奇偶奇偶或偶奇偶奇这类一对一对的组合,也就是一定是偶数个。所以输家最后一定是面对偶数个数字的状态的。所以当清楚姐姐面对偶数个个数时,必输,因为她无论如何操作留给对手的都是必胜局;而面对奇数个数时,必赢,因为她总可以使其变成奇数而始对方处于必败状态。

        代码:

#include <bits/stdc++.h>
using namespace std;

int main(){
    int t;
    cin>>t;
    while(t--){
        int n;
        cin>>n;
        int kn[n+5];
        for(int i=1;i<=n;i++)cin>>kn[i];
        
        if(n%2==0)cout<<"zn"<<endl;
        else cout<<"qcjj"<<endl;
    }
    
    return 0;
}

        2.抄作业

        第一次听说这种叫法还挺新奇。

        题目: N个小球 围成一圈  每次可取不超过k个的连续的若干个 取完了之后产生了空位 空位两侧的就不连续了 先手必胜还是后手必胜。

        思路:要画个圈,假设4个,最多不超取2个,无论先手取几个,我都可以对着去取(抄作业),所以一定是我最后取完。故,若奇数,先手必胜;偶数,先手必败。(当然,k>=n除外)


        可以看出这些题目都是针对奇偶最终状态,想观看视频讲解的可以b站搜索牛客寒假集训营3,其中还有两个类似简单题目。

        经过两个简单例子热身后,可以进一步分类学习了。

三、Nim游戏(^)

        1.经典 

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

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

         题目很简短,思想却不尽然。直接给出思想:将n堆石子的数量进行异或,为0则先手输,非0则先手胜。

        思路:为什么?还是先分析最后状态,面对0、0、0、也就是石子都被取完情况的玩家必输,而在取石子过程中只要面对异或值为0的情况,无论如何操作,留给对手的一定是异或值非0情况;反之,如果异或值为1情况,总存在一种办法,使异或值为0。这叫留给对手的永远都是必败状态——故必胜。至于为什么要异或,为什么会这样,欢迎大家搜索讲解自行观看证明。

       代码:

#include <bits/stdc++.h>
using namespace std;

int main(){
    int n;
    cin>>n;
    int ans,x;
    cin>>ans;
    for(int i=2;i<=n;i++){
        cin>>x;
        ans^=x;
    }
    if(ans==0)cout<<"No"<<endl;
    else cout<<"Yes"<<endl;
    return 0;
}

 


 to be continued !

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

go语言基础 -- 面向对象 -- 接口与多态

接口定义与基本使用 - interface go语言中&#xff0c;接口类型可以定义一组方法&#xff0c;不需要在接口定义中实现方法&#xff0c;并且interface中不能含有变量&#xff0c;如果某个自定义类型要使用时再实现接口的方法。 golang中的接口不需要显式地实现&#xff0c;只要…

秘密共享差分隐私原理解析

1. 隐私计算全貌 &#xfffc;&#xfffc; 可以看到&#xff0c;隐私计算技术从1979年就开始了&#xff0c;历经四代从安全多方计算(MPC)、到差分隐私(DP)、到集中加密技术(TEE)&#xff0c;再到联邦学习(FL)。 2. 秘密共享 secret Sharing 就是“秘密分享”或者“秘密共享”…

“互动+消费”时代,借助华为云GaussDB重构新零售中消费逻辑

场与人的关系 “人—货—场”是零售中重要的三要素&#xff0c;我们一直在追求&#xff0c;将零售中的人、货、场进行数字化并在云端进行整合&#xff0c;形成属于我们自己的云平台。 随着互联网技术为信息提供的便利&#xff0c;消费者的集体力量正在逐渐形成一股强大的反向…

Applied Energy+C论文复现:考虑泊位分配灵活性的港口综合能源系统优化调度程序代码!

程序结合了港口独特的工作属性&#xff0c;构建了泊位优化分配的模型&#xff0c;提出了考虑泊位优化和多能协同的港口综合能源运行优化模型。港口运营商根据多种能源供应的成本特性决策船舶停泊的开始&#xff0f;结束时间&#xff0c;改变港口的总负荷需求曲线。程序算例丰富…

使用postman测试若依登录接口API-2

请求方式 由于登录控制器可知&#xff1a;该请求方式为Post请求 请求地址 在请求路径栏输入请求地址&#xff0c;如下图所示&#xff1a; 参数体 在Body键入所需参数&#xff0c;类型选择raw,数据格式选择"JSON"&#xff1a;如下图所示&#xff1a; 认证成功与失败…

特征值和特征向量及其在机器学习中的应用

特征值和特征向量是线性代数中的概念&#xff0c;用于分析和理解线性变换&#xff0c;特别是由方阵表示的线性变换。它们被用于许多不同的数学领域&#xff0c;包括机器学习和人工智能。 在机器学习中&#xff0c;特征值和特征向量用于表示数据、对数据执行操作以及训练机器学…

NOIP 2009普及组初赛试题及解析

NOIP 2009普及组初赛试题及解析 一. 单项选择题 &#xff08;共20题&#xff0c;每题1.5分&#xff0c;共计30分。每题有且仅有一个正确答案.&#xff09;。二. 问题求解&#xff08;共2题&#xff0c;每题5分&#xff0c;共计10分&#xff09;三. 阅读程序写结果&#xff08;共…

Vue.js 深度解析:模板编译原理与过程

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

网络学习:SMart link技术与Monitor link技术

目录 一、SMart link技术 1.1、SMart link技术简介 1.2、SMart link技术原理及基础知识点 1、应用场景&#xff08;举例&#xff09;&#xff1a; 2、运行机制 3、保护vlan 4、控制VLAN 5、Flush报文 6、SMart link的负载分担机制 7、SMart link角色抢占模式 二、Mo…

YOLOv5目标检测学习(1):yolo系列算法的基础概念

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、基于深度学习的目标检测需要哪些步骤&#xff1f;二、数据准备&#xff08;即准备数据集&#xff09;1.目标检测的数据集如何获取&#xff1f;2.数据集包括…

Python报错ModuleNotFoundError: No module named ‘numpy‘

原因&#xff1a;缺少“numpy” 进入python安装路径&#xff0c;script路径内 在路径下启动终端 01.更新numpy python -m pip install --upgrade pip 02.安装 pip install numpy 03.运行python python 04.导入包 from numpy import * 问题已解决。

MySQL学习Day25——数据库其他调优策略

一、数据库调优的措施: 1.调优的目标: (1)尽可能节省系统资源&#xff0c;以便系统可以提供更大负荷的服务 (2)合理的结构设计和参数调整&#xff0c;以提高用户操作的响应速度 (3)减少系统的瓶颈&#xff0c;提高MySQL数据库整体的性能; 2.如何定位调优:用户的反馈、日志…

政安晨【TypeScript高级用法】(二):泛型与命名空间

TypeScript的泛型允许我们在定义函数、类和接口时使用参数化类型&#xff0c;使得这些实体可以适应不同类型的数据。泛型可以增加代码的重用性和灵活性。 同时&#xff0c;TypeScript的命名空间提供了一种在全局命名空间中组织代码的方式&#xff0c;可以避免全局变量污染和命…

项目打包时报错 There are test failures.

报错原因是 test测试类有问题 我们可直接选择跳过测试类打包 如下 此时再次打包就成功了

高级软件开发知识点

流程 算法题简历上项目用到技术、流程、遇到问题HR 准备 常考的题型和回答思路刷100算法题&#xff0c;理解其思想&#xff0c;不要死记最近一家公司所负责的业务和项目&#xff1a; 项目背景、演进之路&#xff0c;有哪个阶段&#xff0c;每个阶段主要做什么项目中技术选型…

vue2和vue3的区别介绍

Vue.js 是一个流行的前端JavaScript框架&#xff0c;用于构建用户界面和单页应用程序。自从Vue.js首次发布以来&#xff0c;它就因其简洁的API、灵活的架构和易于上手的特点而受到了广泛的欢迎。Vue.js的第二个主要版本&#xff08;Vue 2&#xff09;发布于2016年&#xff0c;而…

AutoGPT实现原理

AutoGPT是一种利用GPT-4模型的自动化任务处理系统&#xff0c;其主要特点包括任务分配、多模型协作、互联网访问和文件读写能力以及上下文联动记忆性。其核心思想是通过零样本学习&#xff08;Zero Shot Learning&#xff09;让GPT-4理解人类设定的角色和目标&#xff0c;并通过…

正则表达式在QT开发中的应用

一.正则表达式在QT开发中的使用&#xff1a; 1.模式匹配与验证&#xff1a;正则表达式最基本的作用就是进行模式匹配&#xff0c;它可以用来查找、识别或验证一个字符串是否符合某个特定的模式。例如&#xff0c;在表单验证中&#xff0c;可以使用正则表达式来检查用户输入的邮…

微擎安装,卡在“安装微擎”界面

进入install.php&#xff0c;点击【在线安装】 下一步配置数据库&#xff0c;开始安装系统 然后显示进度条&#xff0c;进度条一闪而过 然后就没有进度条显示了&#xff0c;一直卡在这里 第一次等了好久&#xff0c; 删除目录下的文件&#xff0c;重装还是这样 再重启服务器&…

C语言数组作为函数参数

有两种情形&#xff1b; 一种是数组元素作为函数实参&#xff1b;一种是数组名作为函数参数&#xff1b; 新建一个VC6单文档工程&#xff1b; void printshz(int , CDC* , int , int ); double getav(int a[5]); ...... void CShzcshView::OnDraw(CDC* pDC) {CShzcshDoc* pDo…