[POJ1704]Georgia and Bob 博弈论
从这开始我们来进入做题环节!作为一个较为抽象的知识点,博弈论一定要结合题目才更显魅力。今天,我主要介绍一些经典的题目,重点是去理解模型的转化,sg函数的推理和证明。话不多说,现在开始!
| Time Limit: 1000MS | Memory Limit: 10000K | |
Description
Georgia and Bob move the chessmen in turn. Every time a player will choose a chessman, and move it to the left without going over any other chessmen or across the left edge. The player can freely choose number of steps the chessman moves, with the constraint that the chessman must be moved at least ONE step and one grid can at most contains ONE single chessman. The player who cannot make a move loses the game.
Georgia always plays first since "Lady first". Suppose that Georgia and Bob both do their best in the game, i.e., if one of them knows a way to win the game, he or she will be able to carry it out.
Given the initial positions of the n chessmen, can you predict who will finally win the game?
Input
Output
Sample Input
2
3
1 2 3
8
1 5 6 7 9 12 14 17
Sample Output
Bob will win
Georgia will win
大致题意是说给一个很长的棋盘,一些地方有棋子,每个格子只能放1个棋子。每次必须要向左移动1个棋子,但不能移除棋盘,也不能超过它左边的第一个棋子。求先手是否必胜。
题解:
(检查草稿箱突然发现自己有暑假的博客没发出来,尴尬......)
这道题上来硬想肯定什么都想不出来。
我们只能通过由浅入深的推理才能做出这道题。
首先我们考虑必败状态的定义:
对于某两个棋子,如果他们两个靠在了一起,那么它们对应的状态就是一个必败状态。
这一点很显然,如果两个棋子贴在一起,先手只能移动前面的棋子,而后手可以通过紧跟先手来继续使先手拿到必败状态。
那么这样,命题得证,这两个紧贴的石子就是一个必败状态了。
那么我们考虑它是从哪里转移而来的:两个棋子如果没有距离了,那么它肯定是从一开始有距离的游戏状态转移过来的.
那么我们可以得到一些式子:
sg(距离为1)=mex(sg(距离为0))=1,
sg(距离为2)=mex(sg(距离为0),sg(距离为1))=2,
sg(距离为3)=mex(sg(距离为0),sg(距离为1),sg(距离为2))=3.......
到这里,读者应该想到了什么了:这就是一个nim游戏的变种!
因此,我们把2个棋子看做1组,之间的空位数看做一堆石子,最后按照nim游戏计算即可。代码见下:
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int N=;
int a[N];
inline bool mt(const int &a,const int &b){return a<b;}
int main()
{
int t,n;scanf("%d",&t);
while(t--)
{
scanf("%d",&n);int ans=;
for(int i=;i<=n;i++)
scanf("%d",&a[i]);
sort(a+,a+n+,mt);
for(int i=;i<=n;i++)
if( ((i&)&&(n&)) || (!(i&)&&!(n&)) )ans^=a[i]-a[i-]-;
if(!ans)printf("Bob will win\n");
else printf("Georgia will win\n");
} }
[POJ1704]Georgia and Bob 博弈论的更多相关文章
- POJ1704 Georgia and Bob 博弈论 尼姆博弈 阶梯博弈
http://poj.org/problem?id=1704 我并不知道阶梯博弈是什么玩意儿,但是这道题的所有题解博客都写了这个标签,所以我也写了,百度了一下,大概是一种和这道题类似的能转换为尼姆博弈 ...
- [poj1704]Georgia and Bob_博弈论
Georgia and Bob poj-1704 题目大意:题目链接 注释:略. 想法:我们从最后一个球开始,每两个凑成一对.如果有奇数个球,那就让第一个球和开始位置作为一对. 那么如果对手移动的是一 ...
- POJ1704 Georgia and Bob
Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 9771 Accepted: 3220 Description Georg ...
- POJ1704 Georgia and Bob (阶梯博弈)
Georgia and Bob Time Limit: 1000MS Memory Limit: 10000KB 64bit IO Format: %I64d & %I64u Subm ...
- POJ1704 Georgia and Bob(Nim博弈变形)
Georgia and Bob Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 14312 Accepted: 4840 ...
- POJ1704 Georgia and Bob Nim游戏
POJ1704 这道题可以转化为经典的Nim游戏来解决. Nim游戏是这样的 有n堆石子,每堆各有ai个. 两个人轮流在任意石子堆中取至少1个石子,不能再取的输. 解决方法如下, 对N堆石子求异或 为 ...
- POJ.1704.Georgia and Bob(博弈论 Nim)
题目链接 \(Description\) 一个1~INF的坐标轴上有n个棋子,给定坐标Pi.棋子只能向左走,不能跨越棋子,且不能越界(<1).两人每次可以将任意一个可移动的棋子向左移动一个单位. ...
- POJ1704 Georgia and Bob 题解
阶梯博弈的变形.不知道的话还是一道挺神的题. 将所有的棋子两两绑在一起,对于奇数个棋子的情况,将其与起点看作一组.于是便可以将一组棋子的中间格子数看作一推石子.对靠右棋子的操作是取石子,而对左棋子的操 ...
- 【POJ1704】Georgia and Bob(博弈论)
[POJ1704]Georgia and Bob(博弈论) 题面 POJ Vjudge 题解 这种一列格子中移动棋子的问题一般可以看做成一个阶梯博弈. 将一个棋子向左移动时,它和前面棋子的距离变小,和 ...
随机推荐
- 利用VBS脚本实现Telnet自动连接
把以下代码保存为*.vbs文件,替换IP.用户名.密码. Dim objShell Set objShell = CreateObject("Wscript.Shell") obj ...
- Rmdir方法
删除现有目录或文件夹. 语法 RmDir路径 所需的_路径_参数标识的目录或文件夹要移除的字符串表达式. _路径_可以包含驱动器. 如果没有指定驱动器, RmDir 将删除当前驱动器上的目录或文件夹. ...
- JetBrains激活 PyCharm | IntelliJ IDEA | CLion | WebStorm...
最近,JetBrains的IDE火了起来,身为学Java的人,放弃了Eclipse,选择了Idea,还真有点不舍得呢... 虽然Idea不错(在我看来,比Eclipse好用),但是,人家是收费的呀.. ...
- docker入门使用教程
Docker概念 Docker是开发人员和系统管理员 使用容器开发,部署和运行应用程序的平台.使用Linux容器部署应用程序称为容器化.容器不是新的,但它们用于轻松部署应用程序. 容器化越来越受欢迎, ...
- NIO基本概念
1. IO和NIO的区别 IO 面向流(stream oriented) 阻塞(blocking io) 无 NIO 面向缓冲区(buffer orie ...
- WPF 自定义 MessageBox (相对完善版 v1.0.0.6)
基于WPF的自定义 MessageBox. 众所周知WPF界面美观.大多数WPF元素都可以简单的修改其样式,从而达到程序的风格统一.可是当你不得不弹出一个消息框通知用户消息时(虽然很不建议在程序中频繁 ...
- Django_缓存
目录 Django缓存的介绍 配置(settings.py设置不同缓存介质) 应用(全局.视图函数.模板) 实测 Django缓存的介绍 除了Django这个web框架之外.其他框架都没有缓存.Dja ...
- TeamWork#3,Week5,Scrum Meeting 11.6, 11.7, 11.11, 11.12
11.6:到目前为止基本已完成相关知识的学习,各方面工作都开始进行,一开始进行比较慢. 11.7:项目遇到困难,需要补充相关知识,进度慢了下来. 11.11:各方面工作进展比较顺利,没有什么大问题. ...
- css方法div固定在网页底部
css .bottom{width:%;height:40px;background:#ededed;;}/*重点后两句*/ body <div class="bottom" ...
- Task 6.2冲刺会议七 /2015-5-20
今天把主界面改善了一下,主要功能时摄像头的使用以及语音聊天的部分,两个部分的设计原理基本相同,但是可是好几个模块让有点不知道该怎么下手.这时候我感觉到了模块拼接是很困难的,只有十分清楚每个模块才能很好 ...