hdu 1809 求SG函数
A New Tetris Game(2)
Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 794 Accepted Submission(s): 275
首先,Lele和姐姐拿出N个长方形的棋盘,这些棋盘中有些格子是不可用的,剩下的都是可用的。每次Lele和姐姐轮流从N个棋盘里选出一个棋盘,拿出俄罗斯方块里的正方形方块(大小为2*2的正方形方块)往这个棋盘里放,要注意的是,放进去的正方形方块不能叠在棋盘不可用的格子上,也不能叠在已经放了的正方形方块上。
到最后,谁不能再放正方形方块,谁就输了。
现在,假设每次Lele和姐姐都很聪明,都能按最优策略放正方形,并且每次都是Lele先放正方形,你能告诉他他是否一定能赢姐姐吗?
每组测试第一行包含一个正整数N(N<30),表示棋盘的输个数
接下来有N个棋盘的描述。
对于每个棋盘,第一行有两个整数R,C(R*C<50),分别表示棋盘的行数和列数。然后有R行,每行C个字符来表示这个棋盘。
其中0是代表棋盘该位置可用,1是代表棋盘该位置不可用
你可以假设,每个棋盘中,0的个数不会超过40个。
4 4
0000
0000
0000
0000
4 4
0000
0010
0100
0000
1
4 4
0000
0010
0100
0000
No
#include<stdio.h>
#include<string.h>
#include<string>
#include<map>
using namespace std;
int n,m; map<string,int>vis_str;
map<string,int>sg;
string s;
void add(int a[][50])//把矩阵转化为一个字符串
{
int i,j;
s="";
for(i=0;i<n;i++)
for(j=0;j<m;j++)
s+=a[i][j]+'0';
} int mex(int a[][50])
{
int i,j,k;
int vis_sg[100];//这里要搞成内置数组 不能搞成全局
memset(vis_sg,0,sizeof(vis_sg));
add(a);
vis_str[s]=1;
for(i=1;i<n;i++)
for(j=1;j<m;j++)
{
if(a[i][j]==0&&a[i-1][j]==0&&a[i][j-1]==0&&a[i-1][j-1]==0)
{
a[i][j]=a[i-1][j]=a[i][j-1]=a[i-1][j-1]=1;
add(a);
if(vis_str[s])
k=sg[s];
else
k=mex(a);
vis_sg[k]=1;
a[i][j]=a[i-1][j]=a[i][j-1]=a[i-1][j-1]=0;
}
}
for(i=0;;i++)
{
if(!vis_sg[i]) { add(a); sg[s]=i; return i;}
}
}
int main()
{
int i,j,a[50][50],t,ans;
while(scanf("%d",&t)!=EOF)
{
ans=0;
while(t--)
{
scanf("%d %d",&n,&m);
for(i=0;i<n;i++)
for(j=0;j<m;j++)
scanf("%1d",&a[i][j]);
// sg.clear();加上这2句就超时 好奇葩 求解答
// vis_str.clear();
ans=ans^mex(a);
}
if(ans) printf("Yes\n");
else printf("No\n");
} return 0;
}
hdu 1809 求SG函数的更多相关文章
- S-Nim HDU 1536 博弈 sg函数
S-Nim HDU 1536 博弈 sg函数 题意 首先输入K,表示一个集合的大小,之后输入集合,表示对于这对石子只能去这个集合中的元素的个数,之后输入 一个m表示接下来对于这个集合要进行m次询问,之 ...
- HDU 5795 A Simple Nim 打表求SG函数的规律
A Simple Nim Problem Description Two players take turns picking candies from n heaps,the player wh ...
- hdu 1848 简单SG函数
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1848 Problem Description 任何一个大学生对菲波那契数列(Fibonacci num ...
- Gym 101246D Fire in the Country(dfs求SG函数)
http://codeforces.com/gym/101246/problem/D 题意: 给定一个无向有环图,大火从1点开始,每个时间点与它相邻的点也将会着火,现在有两个人轮流操作机器人,机器人从 ...
- HDU 1536 求解SG函数
#include<stdio.h> #include<string.h> #include<algorithm> #include<set> using ...
- HDU 5742 Chess SG函数博弈
Chess Problem Description Alice and Bob are playing a special chess game on an n × 20 chessboard. ...
- Alice and Bob HDU - 4111 (SG函数)
Alice and Bob are very smart guys and they like to play all kinds of games in their spare time. The ...
- HDU 1848 Fibonacci again and again (斐波那契博弈SG函数)
Fibonacci again and again Time Limit: 1000MS Memory Limit: 32768KB 64bit IO Format: %I64d & ...
- hdu 3032(博弈sg函数)
题意:与原来基本的尼姆博弈不同的是,可以将一堆石子分成两堆石子也算一步操作,其它的都是一样的. 分析:由于石子的堆数和每一堆石子的数量都很大,所以肯定不能用搜索去求sg函数,现在我们只能通过找规律的办 ...
随机推荐
- UIImage分类:返回一个可以拉伸的图片
// 返回一个可拉伸的图片 // UIImage的分类 + (UIImage *)resizedImage:(NSString *)name { UIImage *image = [self imag ...
- Windows系统服务的编写。
实验资源下载地址:点击打开链接 只是不知道能不能从服务向桌面进程传递消息,,就像两个桌面进程之间用Sendmessage似的..希望有知道的大神可以指点一下..不胜感激.. 因为微软在Vista之后, ...
- java设计模式之二抽象工厂模式(Abstract Factory)
工厂方法模式有一个问题就是,类的创建依赖工厂类,也就是说,如果想要拓展程序,必须对工厂类进行修改,这违背了闭包原则,所以,从设计角度考虑,有一定的问题,如何解决?就用到抽象工厂模式,创建多个工厂类,这 ...
- 文字超出DIV后,隐藏文字并显示...
<html> <head> <style type="text/css"> #cs{width:100px;height:50px;line-h ...
- C# ---- 串口数据YSI实例
原文:C# ---- 串口数据YSI实例 C#----串口数据接收发送中,发送接收数据已经可以模拟了. 本次YSI实例过程中 主要是:类型转换问题 .计算校验码 一.不同设备不同的规则,本次实例代码如 ...
- Android在真机调试的设置方法
1. 设置android手机为USB调试模式.步骤: menu---> 设置 ---> 应用程序 ---> 开发 , 选择[USB调试] 2. 用USB连接手机和电脑,并确保成功.步 ...
- CSS3 选择器读解
文章资料来自于W3Cfuns CSS3.0 四个基本的结构性伪类选择器:root 此选择器将绑定到页面的根元素中,所谓根元素,是指文档树中最顶层的元素,也就是<html>部 分. < ...
- 【Java&Android开源库代码分析】のandroid-async-http の开盘
在<[Java&Android开源库代码剖析]のandroid-smart-image-view>一文中我们提到了android-async-http这个开源库,本文正 ...
- 有趣的游戏:Google XSS Game
Google最近出了一XSS游戏: https://xss-game.appspot.com/ 我这个菜鸟看提示,花了两三个小时才全过了.. 这个游戏的规则是仅仅要在攻击网页上弹出alert窗体就能够 ...
- Spring IOC之容器扩展点
一般来说,一个应用开发者不需要继承ApplicationContext实现类.取而代之的是,Spring IoC容器可以通过插入特殊的整合接口的实现来进行扩展.下面的几点将要讲述这些整合的接口. 1. ...