SCU 3133(博弈)
传送门: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(博弈)相关推荐
- POJ1067_取石子游戏_威佐夫博弈
/* *State: 1067 Accepted 176K 16MS C++ 435B *题目大意: * 威佐夫博弈 *解题思路: * 略. */ #include <iostream> ...
- Codeforces Round #417:E. FountainsSagheer and Apple Tree(树上博弈)
Codeforces Round #417:E. FountainsSagheer and Apple Tree(树上博弈) 标签: codeforces 2017-06-02 11:41 29人阅读 ...
- BZOJ2275[Coci2010]HRPA——斐波那契博弈
题目描述 N个石子,A和B轮流取,A先.每个人每次最少取一个,最多不超过上一个人的个数的2倍. 取到最后一个石子的人胜出,如果A要有必胜策略,第一次他至少要取多少个. 输入 第一行给出数字N,N< ...
- 博弈最高位POJ 1704(Georgia and Bob-Nim博弈)
新手发帖,很多方面都是刚入门,有错误的地方请大家见谅,欢迎批评指正 Georgia and Bob Time Limit: 1000MS Memory Limit: 10000K Total Su ...
- 2016 多校赛3 A 水 B 期望,规律 C 各种博弈 J 物理题,积分 K 暴力,水
2016 Multi-University Training Contest 3 A - Sqrt Bo 题意:给一个数 n,问n要多少次平方后化为1,如果超过5次输出"TAT". ...
- 人类偏好的“可塑性”,从博弈说起
作者 | 斯图尔特·罗素 来源 | <AI新生> 出品 | AI科技大本营 经济学家通过为人类受试者提供选择来套取他们的偏好.该技术广泛应用于产品设计.营销和交互式电子商务系统中.例如,汽 ...
- 点分治问题 ----------- P3727 曼哈顿计划E[点分治+博弈SG函数打表找规律]
题目链接 解题思路: 1.首先对于每个操作我们实际上是一个博弈问题 对于k=1的操作就是很基础的NIM游戏就是找到一条链的异或和为0 对于k=2的操作通过达打表找规律: 如果s是奇数那么偶数的SG函数 ...
- 博弈入门学习的博客[资源汇总]
kuangbin的博弈论 kuangbin的博弈论题解 kuangbin博弈论题单 博弈大佬的博客 博弈论题单 分割形博弈 SG函数
- codeforces1700数学:E2. Close Tuples (hard version)[组合计数 逆向统计] D. Circle Game[对称博弈考虑对称状态的胜负]
E2. Close Tuples (hard version) 题目大意: 给定一个长度为n的序列a,给定一个长度为n的序列a,给定一个长度为n的序列a, 要从中挑选一个m元组(ai1,ai2,ai3 ...
最新文章
- python定义一个汽车类_汽车类Python程序
- 细说 iOS 消息推送
- python二十五:装饰器
- 2.3.8 吸烟者问题
- C#winform抓取百度,Google搜索关键词结果
- 朋友写的一个中国象棋游戏,JAVA代码
- artdialog子弹窗关闭父弹窗
- php.exe系统错误,PhpStorm中报 “Cannot run program git.exe, 系统找不到指定的文件” 错误的解决方法...
- [转载] Python中numpy.clip();numpy.fabs()的用法;以及math.pow()的说明
- java中枚举有什么用_java枚举原来还能这么用
- 读《大数据时代》有感
- python两列时间间隔计算器_计算两列之间的Pandas DataFrame时间差异(以小时和分钟为单位)...
- docker学习笔记(10):docker迁移与升级等其它操作
- syskey (win7启动密码)加密和破解方法
- 【Cesium】加载互联网地图服务——天地图
- 关于用户 'SA' 登录失败
- 清华大学计算机系博士生开会美国签证申请详细流程
- 【如何成为一名优秀的项目经理】跟着本文8个步骤走下去
- 探索世界:新文明之路
- Heapster源码编译,并制作heapster镜像