POJ2234 Matches Game

题意:nnn堆石子,每次任选一堆选取任意个,不能选者输。
思路:经典NIMNIMNIM模型,石子个数异或和为000,则先手必败,否则先手胜。此处的异或和为000,是用归纳法进行证明的,不单只适用于NIMNIMNIM问题,还在SGSGSG函数中应用广泛,感兴趣可以自行查阅。
代码
#include <cstdio>
#include <iostream>
#include <cstring>
#include <algorithm>
#define __ ios::sync_with_stdio(0);cin.tie(0);cout.tie(0)
#define rep(i,a,b) for(int i = a; i <= b; i++)
#define LOG1(x1,x2) cout << x1 << ": " << x2 << endl;
#define LOG2(x1,x2,y1,y2) cout << x1 << ": " << x2 << " , " << y1 << ": " << y2 << endl;
#define LOG3(x1,x2,y1,y2,z1,z2) cout << x1 << ": " << x2 << " , " << y1 << ": " << y2 << " , " << z1 << ": " << z2 << endl;
typedef long long ll;
typedef double db;
const int N = 1e5+100;
const int M = 1e5+100;
const db EPS = 1e-9;
using namespace std;int n;int main()
{while(~scanf("%d",&n)){int tp = 0;rep(i,1,n){int xx; scanf("%d",&xx);tp ^= xx;}if(tp == 0) printf("No\n");else printf("Yes\n");}return 0;
}

POJ1704 Georgia and Bob

题意:一个一维棋盘,棋盘上有nnn个棋子,已知每个棋子的初始位置。每次可以任选一个棋子向左推任意格子,但不能跨越其他棋子,不能操作者输。
思路:仔细研究这个游戏,可以发现一个规律,就是只要前一个棋子能移动,那后一个棋子一定可以模仿前一个棋子进行移动。因此可以考虑将相邻两个棋子两两分组。
假如棋子个数为偶数,则1、21、21、2为一组,3、43、43、4为一组…,如果移动分组中的前一个,则我们移动后一个棋子,完全模仿前一个棋子,因此每组棋子中相隔的步数不变。因此可以将每组棋子看成一个石堆,堆中石子个数为两个棋子间距。因此如果石子个数异或和为000,则先手输,其余均胜。
假如棋子个数为奇数,则第一个棋子与棋盘最左端构成一组,仍然可以两两分组,异或和为000则先手输,其余先手胜。到此,即可完成此题。
反思:本题的重点是如何构造出NIMNIMNIM模型,将一个博弈游戏转化为NIMNIMNIM问题,常见的入手方向是奇偶分组和两两分组。
代码
#include <cstdio>
#include <iostream>
#include <cstring>
#include <algorithm>
#define __ ios::sync_with_stdio(0);cin.tie(0);cout.tie(0)
#define rep(i,a,b) for(int i = a; i <= b; i++)
#define LOG1(x1,x2) cout << x1 << ": " << x2 << endl;
#define LOG2(x1,x2,y1,y2) cout << x1 << ": " << x2 << " , " << y1 << ": " << y2 << endl;
#define LOG3(x1,x2,y1,y2,z1,z2) cout << x1 << ": " << x2 << " , " << y1 << ": " << y2 << " , " << z1 << ": " << z2 << endl;
typedef long long ll;
typedef double db;
const int N = 1e5+100;
const int M = 1e5+100;
const db EPS = 1e-9;
using namespace std;int n,a[N];int main()
{int _; scanf("%d",&_);while(_--){scanf("%d",&n);rep(i,1,n) scanf("%d",&a[i]);sort(a+1,a+1+n); a[0] = 0;int tp = 0, pos;if(n%2 == 0) pos = 1;else pos = 0;while(pos <= n) tp ^= (a[pos+1]-a[pos]-1), pos = pos+2;if(tp == 0) printf("Bob will win\n");else printf("Georgia will win\n");}return 0;
}

【博弈 —— NIM模型】相关推荐

  1. acm之简单博弈 Nim Bash Wythoff

    前些日子我打算开了博弈基础,事后想进行总结下 一句话就是分析必胜或必败,异或为0. 以下内容来自转载: Nim游戏的概述: 还记得这个游戏吗? 给出n列珍珠,两人轮流取珍珠,每次在某一列中取至少1颗珍 ...

  2. poj 2234 博弈-Nim

    (转载)Nim游戏博弈(收集完全版) Nim游戏的概述: 还记得这个游戏吗? 给出n列珍珠,两人轮流取珍珠,每次在某一列中取至少1颗珍珠,但不能在两列中取.最后拿光珍珠的人输. 后来,在一份资料上看到 ...

  3. 博弈——Nim博弈(hdu2176,1850,1851,1907,1849)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2176 http://acm.hdu.edu.cn/showproblem.php?pid=1850 ...

  4. 巴什博弈--Nim游戏

    人机博弈: 现有21根火柴.每次只能取走1~4根.取走最后一根火柴的人输.人先取,计算机后取.要求设计一个程序进行人机对弈,使得计算机一方为"常胜将军". 思路分析: (巴什博弈) ...

  5. Nim博弈和威佐夫博弈 Return of the Nim

    Nim博弈 Nim游戏的概述: 还记得这个游戏吗? 给出n列珍珠,两人轮流取珍珠,每次在某一列中取至少1颗珍珠,但不能在两列中取.最后拿光珍珠的人输. 后来,在一份资料上看到,这种游戏称为" ...

  6. hdu 1907 & hdu 2509(Nim博弈)

    其实我都是一直叫它(尼美博弈) 模型: 给你N堆,每堆数目是确定的(输入),每次从一堆取一个,多者不限,最多取完一堆.有两人AB,A先手,规定最后一个取完者赢(输).问先后手哪个赢(输).(假定两个人 ...

  7. 蓝桥杯 [高僧斗法] Nim博弈

    题目链接:http://lx.lanqiao.cn/problem.page?gpid=T37 题目大意:有个阶梯,上面有些僧人,大师指挥他们.僧人只能向上走,并且不能站在一起或者超越高层的僧人.最高 ...

  8. 【小组专题二:博弈论入门综述(1)】NP状态 | SG函数 | 巴什博奕、威佐夫博弈、斐波那契博弈、Nim游戏、SJ定理

    博弈论综述[1] 前言 博弈与博弈论 博弈树 NP状态 SG函数(Sprague-Grundy) Sprague-Grundy Theorem 巴什博奕 Bash Game 威佐夫博弈 扩展威佐夫博弈 ...

  9. 【学习笔记】平等博弈及常见的公平博弈类型

    文章目录 平等博弈 nim堆 SG定理 nim和 常见的公平博弈模型 bash博弈 nim博弈 nim-k博弈 wythoff博弈 扩展wythoff博弈 fibonacci博弈 阶梯博弈 green ...

  10. 【acm 博弈论 】 之 Nim游戏与sg函数

    文章目录 前言 巴什博弈 威佐夫博弈 Nim游戏 Nim游戏与sg函数 题目 题意 样例 思路 代码 前言 从今天开始复习和整理下acm的部分模块,从博弈论开始. 著名的"取石子" ...

最新文章

  1. Python IDE:PyCharm中的那些实用功能
  2. php自定义能过滤器,过滤器与自定义过滤器的介绍
  3. Diverse Team(CF-988A)
  4. 【静态站点(一)】之 静态网站生成器
  5. 利用Python发送短信,用处多多
  6. 学习笔记===《用户体验要素——以用户为中心的产品设计》
  7. java AES加密解密
  8. Windows活动目录(域服务器)经典系列图文教程
  9. 程序员教程第一章第二节
  10. CWE ID 259:Use of Hard-coded Password
  11. dnw linux 内核,神器DNW2 FOR LINUX!
  12. 万物互联之边缘计算简述-背景
  13. U盘制作ubuntu18.04.6系统安装盘
  14. 约瑟夫问题(c语言)
  15. 计算机无法识别ipad2,win10系统无法识别iphone、ipad的修复方法
  16. STM32F4深入学习【RCC】
  17. TensorRT加速
  18. jmeter 聚合报告里面是什么意思
  19. 翻阅笔记所得杂记若干
  20. 2014秋江苏计算机二级,关于2014年秋季江苏省计算机等级考试报名通知

热门文章

  1. java.util.concurrent.locks.LockSupport
  2. MySQL中的LIMIT 关键字
  3. Js获取处理日期时间
  4. 孟非带伤录制非诚勿扰
  5. centos php mbstring.so,CentOS安装php mbstring的扩展
  6. redis缓存路由为空_千万别看,怕你成为面霸!美团T9总结的Netty+Redis+ZooKeeper核心知识点笔记...
  7. 悟空 mobile.php,悟空CRM无需任何权限的SQL注入漏洞2(ThinkPHP特性)
  8. 聊天室私聊php代码,聊天室技术 - 密谈的实现_php
  9. ai作文批改_有道词典上线AI作文批改功能,可自动批改雅思、四六级作文
  10. mysql索引平衡树hash_MySQL B+树索引和哈希索引的区别