博弈论简单入门sb总结


下午讲博弈论。没预习,GG。

整个下午都在学。

0

有一堆共n个石子,两个人轮流取石子,每个人一次可以取1到k个,取到最后一个石子的人胜利。

小学生都会的sb题。若k+1|n,后手必胜。否则先手必胜。

如果k+1|n,先手第一次取了a个的话,后手取k+1-a个就星了。最后先手GG

否则先手一开始取n%(k+1)个,再按照上面的方法来玩。

1

有n堆石子,每堆a[i]个,两个人轮流取石子,每个人一次可以从一堆中取任意多个,取到最后一个石子的人胜利。

引入一个叫SG函数的东西。(好吧那叫SG

直接蒯了:

一个局面的SG为mex{后继局面的SG}。
mex运算为集合中没出现的最小的自然数。
几个局面的和的SG为它们的SG的异或和。
SG不为0时先手必胜,SG为0时后手必胜。

mdzz不会证

然后就很好球了。

设SG(i)为一堆i个石子的SG值。

SG(0)=0
SG(1)=mex{SG(0)}=1
SG(2)=mex{SG(0),SG(1)}=2
...
SG(i)=mex{SG(0),SG(1),...,SG(i-1)}=i

归纳法可证明SG(i)=i

所以把每堆石子的个数xor起来,非0则先手胜,是0则后手胜。

2

有n堆石子,每堆a[i]个,两个人轮流取石子,每个人一次可以从一堆中取1到k个,取到最后一个石子的人胜利。

加了一个限制,实际上将每个a[i]都%=(k+1)就星了。

考虑感性证明,两个人互相取石子,一个人拿了x个,另一个人马上拿走k+1-x个。

然后还是异或。

3

有n堆石子,每堆a[i]个,两个人轮流取石子,每个人一次可以从至多m堆中取,每堆只能取1到k个,取到最后一个石子的人胜利。

首先啃腚可以a[i]%=k+1

emmmmm然后就很不爽了,这怎么做啊

考虑一下m=1的情况(2号情况)的方案

比如这几个SG值

01110110
10101011
10010100

xor起来是01001001

所以先手一开始取走01001001即可,然后后手取了什么数位,先手也跟着取什么数位

最后先手一定会取到所有都是00000000

写到这吧

做几道题再来(咕咕咕

博弈论简单入门sb总结的更多相关文章

  1. 用IntelliJ IDEA创建Gradle项目简单入门

    Gradle和Maven一样,是Java用得最多的构建工具之一,在Maven之前,解决jar包引用的问题真是令人抓狂,有了Maven后日子就好过起来了,而现在又有了Gradle,Maven有的功能它都 ...

  2. [原创]MYSQL的简单入门

    MYSQL简单入门: 查询库名称:show databases; information_schema mysql test 2:创建库 create database 库名 DEFAULT CHAR ...

  3. Okio 1.9简单入门

    Okio 1.9简单入门 Okio库是由square公司开发的,补充了java.io和java.nio的不足,更加方便,快速的访问.存储和处理你的数据.而OkHttp的底层也使用该库作为支持. 该库极 ...

  4. emacs最简单入门,只要10分钟

    macs最简单入门,只要10分钟  windwiny @2013    无聊的时候又看到鼓吹emacs的文章,以前也有几次想尝试,结果都是玩不到10分钟就退出删除了. 这次硬着头皮,打开几篇文章都看完 ...

  5. 【java开发系列】—— spring简单入门示例

    1 JDK安装 2 Struts2简单入门示例 前言 作为入门级的记录帖,没有过多的技术含量,简单的搭建配置框架而已.这次讲到spring,这个应该是SSH中的重量级框架,它主要包含两个内容:控制反转 ...

  6. Docker 简单入门

    Docker 简单入门 http://blog.csdn.net/samxx8/article/details/38946737

  7. Springmvc整合tiles框架简单入门示例(maven)

    Springmvc整合tiles框架简单入门示例(maven) 本教程基于Springmvc,spring mvc和maven怎么弄就不具体说了,这边就只简单说tiles框架的整合. 先贴上源码(免积 ...

  8. git简单入门

    git简单入门 标签(空格分隔): git git是作为程序员必备的技能.在这里就不去介绍版本控制和git产生的历史了. 首先看看常用的git命令: git init git add git comm ...

  9. 程序员,一起玩转GitHub版本控制,超简单入门教程 干货2

    本GitHub教程旨在能够帮助大家快速入门学习使用GitHub,进行版本控制.帮助大家摆脱命令行工具,简单快速的使用GitHub. 做全栈攻城狮-写代码也要读书,爱全栈,更爱生活. 更多原创教程请关注 ...

随机推荐

  1. Flask 参数简介

    我们都知道学习了Flask的时候它里面的参数是有很多种的参数  都是需要相互进行调用传递的  今天就简要分析一些常见的参数 首先导入Flask之后看 源码 from flask import Flas ...

  2. [book] iOS 8 Swift Programming Cookbook

    iOS 8 Swift Programming Cookbook 资源地址 http://pan.baidu.com/s/1c0hn1Gc 书籍介绍 源码截图 书籍截图

  3. Python学习---IO的异步[asyncio模块(no-http)]

    Asyncio进行异步IO请求操作: 1. @asyncio.coroutine  装饰任务函数 2. 函数内配合yield from 和装饰器@asyncio.coroutine 配合使用[固定格式 ...

  4. Linux dumpe2fs命令详解

    dumpe2fs: 查看格式化之后的文件系统信息. dumpe2fs使用 [root@localhost omc]# dumpe2fs --help<BR>dumpe2fs 1.41.12 ...

  5. 为什么mysql要做主从复制?

    为什么MySQL要做主从复制(读写分离)? 通俗来讲,如果对数据库的读和写都在同一个数据库服务器中操作,业务系统性能会降低. 为了提升业务系统性能,优化用户体验,可以通过做主从复制(读写分离)来减轻主 ...

  6. mac osx 升级到10.10 软件无法打开的问题

    osx升级到10.9.5 和10.10后,很多软件出现无法打开的问题, This patch seems to be corrupted.Please make sure you get your p ...

  7. spark-submit提交参数设置

    /apps/app/spark-1.6.1-bin-hadoop2.6/bin/spark-submit --class com.zdhy.zoc2.sparksql.core.JavaSparkSq ...

  8. Scala编写的打印乘法口诀和金字塔

       刚开始接触scala,觉得语法简单,一时兴起就写了两个简单的例子 public class Calculate { public static void test1(){ for(int i=1 ...

  9. 终端复用工具 tmux 基本操作教程

    简介 在 Linux 操作环境下,终端操作是发挥 Linux 强大命令功能的重要途径,但在本地主机操作中,针对不同任务开启不同的终端,在使用时进行频繁的终端切换在某些场合下是一种使人分心和疲惫的操作, ...

  10. Charles应用指南--安装与代理篇

    Charles是开发测试过程中十分常用的一款代理软件,之前也写了一点基本使用.最近有新同事入职头一次用这个,就写了这么一份基本的安装和配置笔记. Charles 下载地址 mac:链接: https: ...