【博弈 —— NIM模型】
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模型】相关推荐
- acm之简单博弈 Nim Bash Wythoff
前些日子我打算开了博弈基础,事后想进行总结下 一句话就是分析必胜或必败,异或为0. 以下内容来自转载: Nim游戏的概述: 还记得这个游戏吗? 给出n列珍珠,两人轮流取珍珠,每次在某一列中取至少1颗珍 ...
- poj 2234 博弈-Nim
(转载)Nim游戏博弈(收集完全版) Nim游戏的概述: 还记得这个游戏吗? 给出n列珍珠,两人轮流取珍珠,每次在某一列中取至少1颗珍珠,但不能在两列中取.最后拿光珍珠的人输. 后来,在一份资料上看到 ...
- 博弈——Nim博弈(hdu2176,1850,1851,1907,1849)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2176 http://acm.hdu.edu.cn/showproblem.php?pid=1850 ...
- 巴什博弈--Nim游戏
人机博弈: 现有21根火柴.每次只能取走1~4根.取走最后一根火柴的人输.人先取,计算机后取.要求设计一个程序进行人机对弈,使得计算机一方为"常胜将军". 思路分析: (巴什博弈) ...
- Nim博弈和威佐夫博弈 Return of the Nim
Nim博弈 Nim游戏的概述: 还记得这个游戏吗? 给出n列珍珠,两人轮流取珍珠,每次在某一列中取至少1颗珍珠,但不能在两列中取.最后拿光珍珠的人输. 后来,在一份资料上看到,这种游戏称为" ...
- hdu 1907 & hdu 2509(Nim博弈)
其实我都是一直叫它(尼美博弈) 模型: 给你N堆,每堆数目是确定的(输入),每次从一堆取一个,多者不限,最多取完一堆.有两人AB,A先手,规定最后一个取完者赢(输).问先后手哪个赢(输).(假定两个人 ...
- 蓝桥杯 [高僧斗法] Nim博弈
题目链接:http://lx.lanqiao.cn/problem.page?gpid=T37 题目大意:有个阶梯,上面有些僧人,大师指挥他们.僧人只能向上走,并且不能站在一起或者超越高层的僧人.最高 ...
- 【小组专题二:博弈论入门综述(1)】NP状态 | SG函数 | 巴什博奕、威佐夫博弈、斐波那契博弈、Nim游戏、SJ定理
博弈论综述[1] 前言 博弈与博弈论 博弈树 NP状态 SG函数(Sprague-Grundy) Sprague-Grundy Theorem 巴什博奕 Bash Game 威佐夫博弈 扩展威佐夫博弈 ...
- 【学习笔记】平等博弈及常见的公平博弈类型
文章目录 平等博弈 nim堆 SG定理 nim和 常见的公平博弈模型 bash博弈 nim博弈 nim-k博弈 wythoff博弈 扩展wythoff博弈 fibonacci博弈 阶梯博弈 green ...
- 【acm 博弈论 】 之 Nim游戏与sg函数
文章目录 前言 巴什博弈 威佐夫博弈 Nim游戏 Nim游戏与sg函数 题目 题意 样例 思路 代码 前言 从今天开始复习和整理下acm的部分模块,从博弈论开始. 著名的"取石子" ...
最新文章
- Python IDE:PyCharm中的那些实用功能
- php自定义能过滤器,过滤器与自定义过滤器的介绍
- Diverse Team(CF-988A)
- 【静态站点(一)】之 静态网站生成器
- 利用Python发送短信,用处多多
- 学习笔记===《用户体验要素——以用户为中心的产品设计》
- java AES加密解密
- Windows活动目录(域服务器)经典系列图文教程
- 程序员教程第一章第二节
- CWE ID 259:Use of Hard-coded Password
- dnw linux 内核,神器DNW2 FOR LINUX!
- 万物互联之边缘计算简述-背景
- U盘制作ubuntu18.04.6系统安装盘
- 约瑟夫问题(c语言)
- 计算机无法识别ipad2,win10系统无法识别iphone、ipad的修复方法
- STM32F4深入学习【RCC】
- TensorRT加速
- jmeter 聚合报告里面是什么意思
- 翻阅笔记所得杂记若干
- 2014秋江苏计算机二级,关于2014年秋季江苏省计算机等级考试报名通知
热门文章
- java.util.concurrent.locks.LockSupport
- MySQL中的LIMIT 关键字
- Js获取处理日期时间
- 孟非带伤录制非诚勿扰
- centos php mbstring.so,CentOS安装php mbstring的扩展
- redis缓存路由为空_千万别看,怕你成为面霸!美团T9总结的Netty+Redis+ZooKeeper核心知识点笔记...
- 悟空 mobile.php,悟空CRM无需任何权限的SQL注入漏洞2(ThinkPHP特性)
- 聊天室私聊php代码,聊天室技术 - 密谈的实现_php
- ai作文批改_有道词典上线AI作文批改功能,可自动批改雅思、四六级作文
- mysql索引平衡树hash_MySQL B+树索引和哈希索引的区别