POJ 3537 Crosses and Crosses(sg博弈)
2024-09-07 16:49:11
题目:在1*n 的棋盘里面,A和B都在里面画叉 , 如果谁可以画了一个叉后,可以连成3个叉,那谁胜利 ;
分析: 首先考虑如果我在玩游戏,我最希望对手可以画出-x-x or -xx- , 这种情况 ,也就是说玩家就一定不可画成这样给对手制造机会 ; 那可以当成画了一个叉后 就分成了 (x-3) , (x-2-i) ,两个游戏 ,那我们可以根据SG的性质来解决这种分解游戏的游戏
#include<stdio.h>
#include<string.h> //注意 S数组要按从小到大排序 SG函数要初始化为-1 对于每个集合只需初始化1遍
//n是集合s的大小 S[i]是定义的特殊取法规则的数组
int s[],sg[],n;
int SG_dfs(int x)
{
int i;
if(x<)
return ;
if(sg[x]!=-)
return sg[x];
bool vis[];
memset(vis,,sizeof(vis));
for(i=;i<=x;i++)
{
vis[SG_dfs(i-)^SG_dfs(x--i)]=;
}
int e;
for(i=;;i++)
if(!vis[i])
{
e=i;
break;
}
return sg[x]=e;
}
int main( )
{
int n;
memset(sg,-,sizeof(sg));
while(scanf("%d",&n)!=EOF)
{
if(SG_dfs(n))
puts("");
else
puts("");
}
}
最新文章
- js 为字符串添加样式
- linux 生成KEY的方法与使用
- ";XX cannot be resolved to a type ";eclipse报错及解决说明
- Netty线程模型
- (转载)javascript转自世纪流年blog
- 数据类型转换中的一些特殊情况(JY06-JavaScript)
- HDU 1681 Frobenius(完全背包+标记装满)
- Raphael初始化,path,circle,rect,ellipse,image
- ES6学习总结二(数组的四个方法,字符串)
- MySQL之数据的简单查询
- python实现简单的购物车
- 【菜鸟学Python】案例一:汇率换算
- 配置GitHub的SSH key
- Java8 利用Lambda处理List集合循环给另外一个List赋值过滤处理
- css继承样式怎么控制?用选择器
- OnContextMenu事件(转)
- Chrome浏览器导出pdf时,隐藏链接HREF
- php5.5过渡--mysql连接
- syscall to rop
- 如何通过from语句调用模块的变量名?