博弈论补充 异或(不进位加法)

2023-10-11 05:20

本文主要是介绍博弈论补充 异或(不进位加法),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

博弈论 小游戏(可以和家人玩..讲真)
(1)每次最多拿m+1个
(2)大脸盘子 放对称的
(3)有两堆石子 怎么放(数量不同)

tips 1 
在典型的nim问题中,一堆石子,(每次拿任意个)先手如果要赢,(输了就是-1),有多少种走法
***
通过公式(石子数量直接异或可以拿到结果)

这个时候,先手是怎么赢的?
走任意的,就可以赢吗?并不是。
要想达到能够赢了的状态,要达到的是必胜客的状态,也就是异或起来等于0的状态
设本来不等于0的是k,如果通过拿了能拿到ai’=ai^k就可以  拿多少个没事  只要拿了就可以...  ai^k<ai
以及 它的在k最高位是1
因为不进位的加法(否则k的最高位那个1是怎么得到的)
若a1^a2^...^an=k,则一定存在某个ai,它的二进制 表示在k的最高位上是1
****以下为转载  针对HDU 1850- I题****
Nim博弈

题意:有m堆牌,两个人先后取某堆中的任意(不少于一)张牌,最后取完者胜;问先手取胜第一次取牌有多少种取法。

思路:1)如若给出 的是必败状态:a1^a2^......^an=0,则先手不会有任何可能获得胜利;

           2)若给出的是必胜状态:a1^a2^.......^an=k,(其中k不为零),那么我们的目的是要把必胜状态

        转化为必败状态从 而使得先手胜利。若a1^a2^...^an!=0,一定存在某个合法的移动,将ai

       改变成ai'后满足a1^a2^...^ai'^...^an=0。若a1^a2^...^an=k,则一定存在某个ai,

       它的二进制 表示在k的最高位上是1(否则k的最高位那个1是怎么得到的)。这时ai^k<ai一定

       成立。则我们可以将ai改变成ai'=ai^k,此时a1^a2^...^ai'^...^an=a1^a2^...^an^k=0。

 

tips 2 HDU 第二场的game...

.. 还没打完 先不剧透了

反正   最后一个不能取了为止

 A 可以取 1 B可以取其他的 B赢了

那么A可以第一次就把B要拿的和1都拿走

异或:

 

.....

bool竟然差了这么大。

sg函数不够熟悉吧,不理解的话看板子也要会用啊。

https://vjudge.net/problem/HDU-1536

(F)

 

【模板】

/*
void  getSG(int n) {int i, j;memset(SG, 0, sizeof(SG));//因为SG[0]始终等于0,所以i从1开始for (i = 1; i <= n; i++) {//每一次都要将上一状态 的 后继集合 重置memset(S, 0, sizeof(S));for (j = 0; f[j] <= i && j <= k; j++)S[SG[i - f[j]]] = 1;  //将后继状态的SG函数值进行标记for (j = 0;; j++) if (!S[j]) {   //查询当前后继状态SG值中最小的非零值SG[i] = j;break;}}
}*/
void sg_solve( int t)   ///N求解范围 S[]数组是可以每次取的值,t是s的长度。
{// t 是每次可以取的值的那个集合的大小...!!!//f是所有可能的取值 hash是int i, j;memset(sg, 0, sizeof(sg));for (i = 1; i <= N; i++){memset(Hash, 0, sizeof(Hash));for (j = 1; j <= t; j++)if (i - f[j] >= 0)//  if  这个i减去它有效....  有效就是 这一步和之后所有可达的点Hash[sg[i - f[j]]] = 1;// int reach=i-f[j]  Hash[sg[reach]]=1;//很多个reach都被标记了..//这里必须要是0 !!!!for (j =0; j <= N; j++) {if (!Hash[j]) {//if(hash[j])==0 break(没被访问过//(hash记录访问与否..sg[i] = j;break;}}//break是跳出了上面的循环..}
}

记得你读入的时候那个就是j<=t的 以及,下面的j是可以为0的

(G)

我觉得关键在于一个状态,在这个状态里不管它是必胜还是必败,我都有可能完全自己掌控-/ 完全掌控别人

就是(a>2*b的时候) 可以变成a%b+b 对手只能-b和a%b,b  

参考博客:

(主要就是找到一个确定的状态。 这个确定状态的前面- b-a*x和b-2*a*x都可以达到..)

 

 

(参考博客)http://www.cnblogs.com/caijiaming/p/9313671.html  这篇里面很有用的!

[1]

 

[2]注意 “达到对称状态”这里(很重要-。-)

====例行花絮====

 

这篇关于博弈论补充 异或(不进位加法)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/185827

相关文章

uva 10069 DP + 大数加法

代码: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cstring>#include <cmath>#include <stack>#include <vector>#include <queue>#include <map>#include <cl

【多系统萎缩患者必看】✨维生素补充全攻略,守护你的健康每一天!

亲爱的朋友们,今天我们要聊一个既重要又容易被忽视的话题——‌多系统萎缩患者如何科学补充维生素‌!🌟 在这个快节奏的生活中,健康成为了我们最宝贵的财富,而对于多系统萎缩(MSA)的患者来说,合理的营养补充更是维护身体机能、提升生活质量的关键一步。👇 🌈 为什么多系统萎缩患者需要特别关注维生素? 多系统萎缩是一种罕见且复杂的神经系统疾病,它影响身体的多个系统,包括自主神经、锥体外系、小脑及锥

Vue2电商项目(二) Home模块的开发;(还需要补充js节流和防抖的回顾链接)

文章目录 一、Home模块拆分1. 三级联动组件TypeNav2. 其余组件 二、发送请求的准备工作1. axios的二次封装2. 统一管理接口API----跨域3. nprogress进度条 三、 vuex模块开发四、TypeNav三级联动组件开发1. 动态展示三级联动数据2. 三级联动 动态背景(1)、方式一:CSS样式(2)、方式二:JS 3. 控制二三级数据隐藏与显示--绑定styl

Numpy random.random()函数补充

np.random.random() np.random.random()的作用是生成指定形状的均匀分布的值为[0,1)的随机数 参数为size,也就是用于指定的形状大小 import numpy as npprint(np.random.random(size=(2, 2)))# [[0.19671797 0.85492315]# [0.99609539 0.66437246]]

高精度加法,乘法,阶乘

#include <iostream>#include <map>#include <string>#include <algorithm>using namespace std;const int Max = 50000;string str1,str2;/***********乘法***********/void chenfa(){cin >> str1>>str2;int a

”CSS 网格“二维布局系统(补充)——WEB开发系列32

CSS 网格布局是一种二维布局系统,用于网页设计。通过使用网格,你可以将内容以行和列的形式进行排列。此外,网格布局还能够简便地实现一些复杂的布局结构。 一、什么是网格布局? CSS网格布局是一种二维布局系统,它允许我们创建复杂的网页布局,既可以处理行也可以处理列。与传统的布局方法不同,网格布局将网页分成多个可控的区域,这些区域可以任意排列、对齐和调整大小。网格布局使得创建灵活且响应

【OpenCV2.2】图像的算术与位运算(图像的加法运算、图像的减法运算、图像的融合)、OpenCV的位运算(非操作、与运算、或和异或)

1 图像的算术运算 1.1 图像的加法运算 1.2 图像的减法运算 1.3 图像的融合 2 OpenCV的位运算 2.1 非操作 2.2 与运算 2.3 或和异或 1 图像的算术运算 1.1 图像的加法运算 add opencv使用add来执行图像的加法运算 图片就是矩阵, 图片的加法运算就是矩阵的加法运算, 这就要求加法运算的两张图shape必须是相同的. # 图片加法imp

用异或交换两个整数的陷阱

前面我们谈到了,可用通过异或运算交换两个数,而不需要任何的中间变量。 如下面: void exchange(int &a, int &b) {     a ^= b;     b ^= a;     a ^= b; } 然而,这里面却存在着一个非常隐蔽的陷阱。 通常我们在对数组进行操作的时候,会交换数组中的两个元素,如exchang(&a[i], &b[j]),

“弹性盒子”一维布局系统(补充)——WEB开发系列31

弹性盒子是一种一维布局方法,用于根据行或列排列元素。元素可以扩展以填补多余的空间,或者缩小以适应较小的空间,为容器中的子元素提供灵活的且一致的布局方式。 一、什么是弹性盒子? CSS 弹性盒子(Flexible Box Layout,简称 Flexbox)是 CSS3 中引入的一种布局模式,提供一种有效的方式来布局、对齐和分配容器内空间,特别是在动态和复杂的应用界面中。 1、

UML的图及其他图补充

一、UML图 1.类图 ‌类图‌是统一建模语言(UML)中的一种静态结构图,主要用于描述软件系统的静态结构。它显示了模型中的类、类的内部结构以及它们与其他类的关系。类图是面向对象建模的主要组成部分,用于对系统的词汇进行建模、对简单的协作进行建模以及对逻辑数据库模式进行建模。类图的基本元素包括类、接口以及它们之间的关系,这些元素共同构成了系统的静态结构模型。 总结: 1.静态图、