好久之前看的sg函数了

好像就记住一个nim博弈qwq

第一次啊看的时候很迷,现在感觉可以了qwq


首先我们来看一个其他的游戏。(以下游戏只有两个人参与,且足够聪明)

两个人在一张圆形的桌子上放等大的盘子,最后一个无法放盘子的人输掉比赛

很显然,先手必胜。

为什么? 第一个人可以将盘子放在桌子的中心。

然后只要第二个人可以放置盘子,我们就在其中心对称的位置上放盘子。

如此,只要后手可以放,我先手就一定能放

可以看出,有时候如果处于先手必胜的状态时,模仿对手的策略不妨是个好方法。这可以保证如果游戏可以进行下去的话,先手就一定能进行下去。


我们再来看一个更nim游戏的弱化版

有两个火柴堆,每堆的火柴数不一定相同,每次一个人只能从一堆中选取若干个火柴并取走。没有火柴可取的人输

好像这和上个题没有什么关系qwq

我们假设两个火柴堆的数目都相同。那么肯定是先手必输

为什么?因为后手总可以从另一堆中取的和先手上一次取得一样的火柴。

只要先手可以取,后手就可以取。

所有该游戏的判定条件是,若两堆相等,先手必输,否则,先手必胜,先手总可以将两堆取成一样多


先手必胜时总有一种策略可以转移到后手必败

后手必败总是会转移到先手必胜

好像大佬如此说过


然后我们看van♂整版nim

P1247 取火柴游戏

先说结论,若所有火柴堆异或起来的值为0的话,先手必败,否则先手必胜

啥?mengbi qwq

(ノ`⊿´)ノ为什么和异或结合起来的啊喂

这是得益于毒瘤的二进制和更毒瘤的异或

异或有一个特殊的规律,就是一堆数异或时,若在同一个二进制位上1的个数是偶数,那么这一位异或起来以后是0,否则为1

二进制的话就是可以使用0/1表示所有数字


我们来看上一个游戏,我们将这两堆的剩余的火柴数转变成二进制。

发现我们先手取走一个数,就是改变其二进制为上的1的个数(只考虑奇偶性),而后手再去取的话就是将其奇偶性再变回来


然后我们再回去看为什么异或和是0时先手必输,因为先手拿走了某些火柴时,我们可以根据其拿走火柴的二进制表示,在其他一堆中拿走一些一些数字,使得其异或和重新为0;

怎么搞呢? 我们可以拿走一些数,也就是减某一个数,使得先手拿完后,(啰嗦警告)

所有堆中的每个二进制上的一的个数的和,我们总可以通过加减一个数,达到在某一个二进制位的1的个数进行加一or减一的效果

使得某一位二进制上的1的个数变为偶数。

从而使得游戏又恢复到了一开始的局面

end......

sg函数好像也是这个思想qwq

此题代码

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<iostream>
using std::sort;
const int maxn=501000;
int data[maxn];
int main()
{
int n;
scanf("%d",&n);
int x=0;
for(int i=1;i<=n;i++)
{
scanf("%d",&data[i]);
x^=data[i];
}
if(x==0)
{
printf("lose");
return 0;
}
for(int i=1;i<=n;i++)
if((data[i]^x)<=data[i])
{
printf("%d %d\n",data[i]-(data[i]^x),i);
data[i]^=x;
break;
}
for(int i=1;i<=n;i++)
printf("%d ",data[i]);
}

取火柴游戏||Nim博弈的更多相关文章

  1. 取球游戏_nyoj_518(博弈-蓝桥杯原题).java

    取球游戏 时间限制: 1000 ms  |  内存限制: 65535 KB 难度: 2   描述 今盒子里有n个小球,A.B两人轮流从盒中取球,每个人都可以看到另一个人取了多少个,也可以看到盒中还剩下 ...

  2. P1247 取火柴游戏

    题目描述 输入k及k个整数n1,n2,-,nk,表示有k堆火柴棒,第i堆火柴棒的根数为ni:接着便是你和计算机取火柴棒的对弈游戏.取的规则如下:每次可以从一堆中取走若干根火柴,也可以一堆全部取走,但不 ...

  3. 【BZOJ1413】取石子游戏(博弈,区间DP)

    题意:在研究过Nim游戏及各种变种之后,Orez又发现了一种全新的取石子游戏,这个游戏是这样的: 有n堆石子,将这n堆石子摆成一排.游戏由两个人进行,两人轮流操作,每次操作者都可以从最左或最右的一堆中 ...

  4. Nowcoder 挑战赛23 B 游戏 ( NIM博弈、SG函数打表 )

    题目链接 题意 : 中文题.点链接 分析 : 前置技能是 SG 函数.NIM博弈变形 每次可取石子是约数的情况下.那么就要打出 SG 函数 才可以去通过异或操作判断一个局面的胜负 打 SG 函数的时候 ...

  5. HDU 2516 取石子游戏(FIB博弈)

    取石子游戏 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submi ...

  6. BZOJ 1874: [BeiJing2009 WinterCamp]取石子游戏 [Nim游戏 SG函数]

    小H和小Z正在玩一个取石子游戏. 取石子游戏的规则是这样的,每个人每次可以从一堆石子中取出若干个石子,每次取石子的个数有限制,谁不能取石子时就会输掉游戏. 小H先进行操作,他想问你他是否有必胜策略,如 ...

  7. 取石子游戏 BZOJ1874 博弈

    小H和小Z正在玩一个取石子游戏. 取石子游戏的规则是这样的,每个人每次可以从一堆石子中取出若干个石子, 每次取石子的个数有限制,谁不能取石子时就会输掉游戏. 小H先进行操作,他想问你他是否有必胜策略, ...

  8. 洛谷P1247取火柴游戏

    题目:https://www.luogu.org/problemnew/show/P1247 可以知道必败局面为n[1]^n[2]^...^n[k]=x=0: 而若x不等于0,则一定可以取一次使其变为 ...

  9. hdu 2516 取石子游戏 (Fibonacci博弈)

    取石子游戏 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submi ...

随机推荐

  1. [Activator-HelloAkka] Define our Actors

    The Actor is the unit of execution in Akka. Actors are object-oriented in the sense that they encaps ...

  2. ThinkPHP3.2 整合支付宝RSA加密方式

    RSA核心加密验证算法 <?php /** * RSA签名 * @param $data 待签名数据 * @param $private_key 商户私钥字符串 * return 签名结果 */ ...

  3. SpringSecurity 3.2入门(3)单用户登录

    1.增加web.xml文件配置如下 <!-- 获取Spring Security session的生命周期,这个监听器会在 session 创建和销毁的时候通知 Spring Security ...

  4. C++里创建 Trie字典树(中文词典)(一)(插入、遍历)

    萌新做词典第一篇,做得不好,还请指正,谢谢大佬! 写了一个词典,用到了Trie字典树. 写这个词典的目的,一个是为了压缩一些数据,另一个是为了尝试搜索提示,就像在谷歌搜索的时候,打出某个关键字,会提示 ...

  5. Please, configure Web Facet first!idea报这错的解决办法!!

    Please, configure Web Facet first!idea报这错的解决办法!! 今天在idea导入用eclipse的项目,然后运行项目的时候报这个错, 看下图 网上找了好多都没解决, ...

  6. ECharts动态数据加载

    最近有用到ECharts做可视化报表,小结一下 一.准备数据 1.官网下载echarts.min.js 2.引入jquery.js 3.请求用的json数据 { "list":[ ...

  7. drupal基础

    http://www.cnblogs.com/yaoliang11/archive/2009/07/31/1535883.html

  8. 【Mood-15】DailyBuild 1月

    keywords: AsyncImageLoader universal-image-loader 2015-01-07 AsyncImageLoader:异步动态加载网络图片  类似listview ...

  9. JMeter 配置元件之-HTTP Cookie管理器-实现 Cookie 登录

    下面以购物App常用的收藏功能为例,讲述如何在 JMeter 中使用 cookie 进行登录态操作.具体的操作步骤如下所示: 第一步.录制查看收藏列表的 HTTP请求: 录制查看收藏列表的HTTP请求 ...

  10. IT小小鸟读书笔记2

    Part4: 一.    大学的时光真的很容易荒废,自己的实力到头来和自己的成绩单一样空虚,其实自己也是深有同感的. 二.    这个观点我十分的认同:在某个方面比别人多5%的深度,可能拿到的报酬就是 ...