链接:

http://poj.org/problem?id=3537

题意:

有个2人玩的游戏在一个规模为1*n的棋盘上进行,每次一个人选择一个地方画上’X’,一旦某个人画上X后出现了连续3个X,那么这个人就赢了。

题解:

仔细思考一下我们发现,xxx的上一步只能是oxx,xox,xxo的其中一种,也就是说如果谁走出一步形成上述局面那么谁就必败。 
再进一步说,如果你在第i个格子画x,那么i-1,i-2,i+1,i+2,都不可以画x,因为那样会必败。 
这样题目就可以转化为,轮流画x,谁没有格子画x谁就输。 
以上例来进行一下计算,假设N为3,也就是OOOO,当前局面有4个子局面,XOOO,OXOO,OOXO,OOOX。 
1. XOOO对于当前玩家只有一步可走,就是XOOX(别忘了上面说过每走一步,该位置左右共4个位置都不能),所以XOOO就是一个N-position局面(后手输)。 
2. OXOO对于当前玩家无步可走,所以是一个P-position(先手输)。 
3. 4. OOXO,OOOX就不再赘述,前者P,后者N。

那么OOOO显然是一个N-position,因为他的子局面中有P-position(他当然会把这种局面留给自己的对手)。

根据上面这个过程,可以得到一个递归的算法——对于当前的局面,递归计算它的所有子局面的性质,如果存在某个子局面是P-position,那么向这个子局面的移动就是必胜策略。

代码:

 1 #include <map>
 2 #include <set>
 3 #include <cmath>
 4 #include <queue>
 5 #include <stack>
 6 #include <cstdio>
 7 #include <string>
 8 #include <vector>
 9 #include <cstdlib>
10 #include <cstring>
11 #include <sstream>
12 #include <iostream>
13 #include <algorithm>
14 #include <functional>
15 using namespace std;
16 #define rep(i,a,n) for (int i=a;i<n;i++)
17 #define per(i,a,n) for (int i=n-1;i>=a;i--)
18 #define all(x) (x).begin(),(x).end()
19 #define pb push_back
20 #define mp make_pair
21 #define lson l,m,rt<<1
22 #define rson m+1,r,rt<<1|1
23 typedef long long ll;
24 typedef vector<int> VI;
25 typedef pair<int, int> PII;
26 const ll MOD = 1e9 + 7;
27 const int INF = 0x3f3f3f3f;
28 const int MAXN = 2010;
29 // head
30
31 int sg[MAXN];
32
33 int get_sg(int n) {
34     if (n <= 0) return 0;
35     if (sg[n] != -1) return sg[n];
36     bool f[MAXN] = {};
37     rep(i, 1, n + 1) f[get_sg(i - 3) ^ get_sg(n - i - 2)] = 1;
38     for (int i = 0;; i++) if (!f[i]) return sg[n] = i;
39 }
40
41 int main() {
42     int n;
43     memset(sg, -1, sizeof(sg));
44     while (cin >> n) {
45         if (get_sg(n)) cout << 1 << endl;
46         else cout << 2 << endl;
47     }
48     return 0;
49 }

转载于:https://www.cnblogs.com/baocong/p/6751991.html

POJ 3537 Nim游戏相关推荐

  1. POJ 1704 Georgia and Bob (Nim游戏变形)

    题目:http://poj.org/problem?id=1704 思路:Nim游戏策略,做如下转换,如果N是偶数,则两两配对,将两个数之间的格子数(距离)看做成这一堆石头的数量. 如果N是奇数,则将 ...

  2. POJ 2975 Nim(博弈论)

    [题目链接] http://poj.org/problem?id=2975 [题目大意] 问在传统的nim游戏中先手必胜策略的数量 [题解] 设sg=a1^a1^a3^a4^---^an,当sg为0时 ...

  3. 【bzoj3150】 cqoi2013—新Nim游戏

    www.lydsy.com/JudgeOnline/problem.php?id=3105 (题目链接) 题意 在第一个回合中,第一个游戏者可以直接拿走若干个整堆的火柴.可以一堆都不拿,但不可以全部拿 ...

  4. LeetCode实战:Nim 游戏

    背景 为什么你要加入一个技术团队? 如何加入 LSGO 软件技术团队? 我是如何组织"算法刻意练习活动"的? 为什么要求团队的学生们写技术Blog 题目英文 You are pla ...

  5. BZOJ 3105:[cqoi2013]新Nim游戏

    BZOJ 3105:[cqoi2013]新Nim游戏 题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=3105 题目大意:在传统的Nim取石子 ...

  6. 【bzoj3105】新Nim游戏

    Portal--> bzoj3105 新Nim游戏 Solution 转化一下问题 首先看一下原来的Nim游戏,先手必胜的条件是:每堆数量的异或和不为\(0\) 所以在新的游戏中,如果要保证自己 ...

  7. 文巾解题 292. Nim 游戏

    1 题目描述 2 解题思路 这其实是一个脑筋急转弯一样的题目.先给出结论吧:如果堆中石头的数量 n 不能被 4 整除,那么你总是可以赢得 Nim 游戏的胜利. 下面是推导部分: 让我们考虑一些小例子. ...

  8. 洛谷P4301 [CQOI2013]新Nim游戏

    洛谷P4301 [CQOI2013]新Nim游戏 题目描述 传统的Nim游戏是这样的:有一些火柴堆,每堆都有若干根火柴(不同堆的火柴数量可以不同).两个游戏者轮流操作,每次可以选一个火柴堆拿走若干根火 ...

  9. 洛谷 P2197 nim游戏

    洛谷 P2197 nim游戏 题目描述 甲,乙两个人玩Nim取石子游戏. nim游戏的规则是这样的:地上有n堆石子(每堆石子数量小于10000),每人每次可从任意一堆石子里取出任意多枚石子扔掉,可以取 ...

最新文章

  1. js 将线性数据转为树形
  2. 如何查看文件夹里有几张图片_如何把几张图片合成一个pdf?图片合并为pdf的操作教程...
  3. Spring+Quartz(一)
  4. Fiddler工具杂记-存储特定的数据包保存到文件(CustomRules.js基本使用)
  5. Mac:Split文件分割命令
  6. html 模板 引用,模板引用说明
  7. 2021-04-03
  8. 互联的情怀 凝成一股绳共同成长
  9. 线性代数矩阵秩的8大性质、重要定理以及关系
  10. 计算机组装维修diy,ITX装机教程实录:三千元ITX迷你电脑组装电脑全过程-DIY装机...
  11. Parsing error: No Babel config file detected for ....
  12. 基因组测序分析linux,基因组数据的重测序分析
  13. js三座大山----(第三座山)
  14. dism 分割镜像_DISM修改WDS启动镜像实现自动捕获镜像
  15. mybatis框架实现一对多、多对多关系查询,以及递归查询(单表多级分类:省市区三级地址查询)
  16. HyperLedger Fabric 学习思路分享
  17. 怎么判断30公分?看我的图文传教就清楚了
  18. web作业—简历信息管理系统
  19. 在外远程桌面控制家里的电脑
  20. mysql强力推荐启用binlog

热门文章

  1. KTH 皇家理工学院 计算机视觉和机器学习博士生 招生
  2. 图像分割中的深度学习:U-Net 体系结构
  3. 波士顿动力再发逆天机器人视频:倒立、360°旋转、空中劈叉,真是秀儿
  4. 内存占用少,计算速度快!华为诺亚方舟Lab开源即插即用的多用卷积核(NeurIPS 2018)...
  5. 论文推荐|Mask TextSpotter:An End-to-End Trainable Neural Network
  6. c语言 read 文件字节没超过数组大小时会怎样_剑指信奥 | C 语言之信奥试题详解(四)...
  7. 初学者应该如何有效率的系统学习Python开发
  8. 【OpenCV】OpenCV函数精讲之 -- 感兴趣区域ROI
  9. 计算机视觉论文-2021-07-01
  10. 最新《机器学习最优化》课程笔记,38页pdf,Optimization for Machine Learning