传送门:windy和水星 -- 水星游戏 2

题意:在一张由 n*m 的格子组成的棋盘上放着 k 个骑士每个骑士的位置为(xi,yi),表示第xi行,第yi列骑士如果当前位置为(x,y),一步可以走的位置为

(x-2,y-1)

(x-2,y+1)

(x-1,y-2)

(x+1,y-2)

两人对弈,每次移动至少一个至多k个骑士,在同一时间可有多个骑士在同一格子,谁不能移动谁输现在给定初始棋面,问先手是否有必胜的策略?

分析:假设全部的子游戏都为败态,那么先者必输

如果其中有某些为胜态,那么先者可以将所有的胜态都转为败态,最终先者必胜

这里说一下博弈的重要思想:假设N状态为必胜态,P状态为必败态,则

所有的终止状态都是P状态;

对于任何的N状态,肯定存在一种方式可以一步转到一个P状态;

对于任何的P状态,不管怎么走步,都只能转到N状态。

因此这题(0,0),(0,1),(1,0),(1,1)肯定是必败态,所有可以到达这4点的格子肯定为必胜态,而所有只能到达必胜态的格子肯定为必败态,sg值等0的为必败态,否则必胜态。

#include <cstdio>
#include <cstring>
#include <algorithm>
#define N 110
using namespace std;
int n,m,k;
int sg[N][N];
int dx[]={-2,-2,-1,1};
int dy[]={-1,1,-2,-2};
bool judge(int a,int b)
{return a>=0&&a<n&&b>=0&&b<m;
}
int dfs(int x,int y)
{if(~sg[x][y])return sg[x][y];int vis[5],temp;memset(vis,false,sizeof(vis));for(int i=0;i<4;i++){int a=x+dx[i],b=y+dy[i];if(!judge(a,b))continue;if((temp=sg[x][y])==-1)temp=dfs(a,b);vis[temp]=1;}for(int i=0;i<5;i++){if(vis[i])continue;return sg[x][y]=i;}
}
int main()
{while(scanf("%d%d%d",&n,&m,&k)>0){memset(sg,-1,sizeof(sg));for(int i=0;i<n;i++)for(int j=0;j<m;j++)if(sg[i][j]==-1)dfs(i,j);int x,y,flag=0;while(k--){scanf("%d%d",&x,&y);if(sg[x][y])flag=1;}if(flag)puts("yes");else puts("no");}
}

View Code

转载于:https://www.cnblogs.com/lienus/p/4326416.html

SCU 3133(博弈)相关推荐

  1. POJ1067_取石子游戏_威佐夫博弈

    /* *State: 1067 Accepted 176K 16MS C++ 435B *题目大意: * 威佐夫博弈 *解题思路: * 略. */ #include <iostream> ...

  2. Codeforces Round #417:E. FountainsSagheer and Apple Tree(树上博弈)

    Codeforces Round #417:E. FountainsSagheer and Apple Tree(树上博弈) 标签: codeforces 2017-06-02 11:41 29人阅读 ...

  3. BZOJ2275[Coci2010]HRPA——斐波那契博弈

    题目描述 N个石子,A和B轮流取,A先.每个人每次最少取一个,最多不超过上一个人的个数的2倍. 取到最后一个石子的人胜出,如果A要有必胜策略,第一次他至少要取多少个. 输入 第一行给出数字N,N< ...

  4. 博弈最高位POJ 1704(Georgia and Bob-Nim博弈)

    新手发帖,很多方面都是刚入门,有错误的地方请大家见谅,欢迎批评指正 Georgia and Bob Time Limit: 1000MS   Memory Limit: 10000K Total Su ...

  5. 2016 多校赛3 A 水 B 期望,规律 C 各种博弈 J 物理题,积分 K 暴力,水

    2016 Multi-University Training Contest 3 A - Sqrt Bo 题意:给一个数 n,问n要多少次平方后化为1,如果超过5次输出"TAT". ...

  6. 人类偏好的“可塑性”,从博弈说起

    作者 | 斯图尔特·罗素 来源 | <AI新生> 出品 | AI科技大本营 经济学家通过为人类受试者提供选择来套取他们的偏好.该技术广泛应用于产品设计.营销和交互式电子商务系统中.例如,汽 ...

  7. 点分治问题 ----------- P3727 曼哈顿计划E[点分治+博弈SG函数打表找规律]

    题目链接 解题思路: 1.首先对于每个操作我们实际上是一个博弈问题 对于k=1的操作就是很基础的NIM游戏就是找到一条链的异或和为0 对于k=2的操作通过达打表找规律: 如果s是奇数那么偶数的SG函数 ...

  8. 博弈入门学习的博客[资源汇总]

    kuangbin的博弈论 kuangbin的博弈论题解 kuangbin博弈论题单 博弈大佬的博客 博弈论题单 分割形博弈 SG函数

  9. codeforces1700数学:E2. Close Tuples (hard version)[组合计数 逆向统计] D. Circle Game[对称博弈考虑对称状态的胜负]

    E2. Close Tuples (hard version) 题目大意: 给定一个长度为n的序列a,给定一个长度为n的序列a,给定一个长度为n的序列a, 要从中挑选一个m元组(ai1,ai2,ai3 ...

最新文章

  1. python定义一个汽车类_汽车类Python程序
  2. 细说 iOS 消息推送
  3. python二十五:装饰器
  4. 2.3.8 吸烟者问题
  5. C#winform抓取百度,Google搜索关键词结果
  6. 朋友写的一个中国象棋游戏,JAVA代码
  7. artdialog子弹窗关闭父弹窗
  8. php.exe系统错误,PhpStorm中报 “Cannot run program git.exe, 系统找不到指定的文件” 错误的解决方法...
  9. [转载] Python中numpy.clip();numpy.fabs()的用法;以及math.pow()的说明
  10. java中枚举有什么用_java枚举原来还能这么用
  11. 读《大数据时代》有感
  12. python两列时间间隔计算器_计算两列之间的Pandas DataFrame时间差异(以小时和分钟为单位)...
  13. docker学习笔记(10):docker迁移与升级等其它操作
  14. syskey (win7启动密码)加密和破解方法
  15. 【Cesium】加载互联网地图服务——天地图
  16. 关于用户 'SA' 登录失败
  17. 清华大学计算机系博士生开会美国签证申请详细流程
  18. 【如何成为一名优秀的项目经理】跟着本文8个步骤走下去
  19. 探索世界:新文明之路
  20. Heapster源码编译,并制作heapster镜像

热门文章

  1. C 指针常量 和常量指针 指向常量的指针常量的使用
  2. Git 使用帮助(下)
  3. Linux产生随机数的几种常见方法
  4. 定制Sublime主题
  5. android 一个有漂亮动画效果的Dialog
  6. 5月9日 python学习总结 外键、表之间的关联关系、修改表、清空表内容、复制表...
  7. css(float浮动和clear清除)
  8. 题目1208:10进制 VS 2进制(进制转换以及大数保存问题)
  9. Java .Net Byte数组存储差异以及解决方法
  10. 【Javascript】 DOM节点