hdu 1760 A New Tetris Game
2017-08-22 17:45
351 查看
题目链接:点这里。
Problem Description
Input
Output
Sample Input
Sample Output
【分析】
二维博弈,我也是第一次做。自己写了一下。懂原理的话还是挺简单的。一开始就是这样想的,虽然数据量小但是开始担心递归层数太多会爆掉,后来重新读了一下题才明白过来,最多也就十层。不担心。
【代码】
Problem Description
曾经,Lele和他姐姐最喜欢,玩得最久的游戏就是俄罗斯方块(Tetris)了。 渐渐得,Lele发觉,玩这个游戏只需要手快而已,几乎不用经过大脑思考。 所以,Lele想出一个新的玩法。 Lele和姐姐先拿出一块长方形的棋盘,这个棋盘有些格子是不可用的,剩下的都是可用的。Lele和姐姐拿出俄罗斯方块里的正方形方块(大小为2*2的正方形方块)轮流往棋盘里放,要注意的是,放进去的正方形方块不能叠在棋盘不可用的格子上,也不能叠在已经放了的正方形方块上。 到最后,谁不能再放正方形方块,谁就输了。 现在,假设每次Lele和姐姐都很聪明,都能按最优策略放正方形,并且每次都是Lele先放正方形,你能告诉他他是否一定能赢姐姐吗?
Input
本题目包含多组测试,请处理到文件结束。 每组测试第一行包含两个正整数N和M(0<N*M<50)分别代表棋盘的行数和列数。 接下来有N行,每行M个0或1的数字代表整个棋盘。 其中0是代表棋盘该位置可用,1是代表棋盘该位置不可用 你可以假定,每个棋盘中,0的个数不会超过40个。
Output
对于每一组测试,如果Lele有把握获胜的话,在一行里面输出"Yes",否则输出"No"。
Sample Input
4 4 0000 0000 0000 0000 4 4 0000 0010 0100 0000
Sample Output
Yes No
【分析】
二维博弈,我也是第一次做。自己写了一下。懂原理的话还是挺简单的。一开始就是这样想的,虽然数据量小但是开始担心递归层数太多会爆掉,后来重新读了一下题才明白过来,最多也就十层。不担心。
【代码】
#include<iostream> #include<cstdio> #include<cstring> #include<string.h> #include<algorithm> #include<vector> #include<cmath> #include<stdlib.h> #include<time.h> #include<stack> #include<set> #include<map> #include<queue> #include<sstream> using namespace std; #define rep0(i,l,r) for(int i = (l);i < (r);i++) #define rep1(i,l,r) for(int i = (l);i <= (r);i++) #define rep_0(i,r,l) for(int i = (r);i > (l);i--) #define rep_1(i,r,l) for(int i = (r);i >= (l);i--) #define MS0(a) memset(a,0,sizeof(a)) #define MS_1(a) memset(a,-1,sizeof(a)) #define MSinf(a) memset(a,0x3f,sizeof(a)) #define sin1(a) scanf("%d",&(a)) #define sin2(a,b) scanf("%d%d",&(a),&(b)) #define sll1(a) scanf("%lld",&(a)) #define sll2(a,b) scanf("%lld%lld",&(a),&(b)) #define sdo1(a) scanf("%lf",&(a)) #define sdo2(a,b) scanf("%lf%lf",&(a),&(b)) #define inf 0x3f3f3f3f //#define lson i<<1,l,mid //#define rson ((i<<1)|1),mid+1,r #define uint unsigned int typedef pair<int,int> PII; #define A first #define B second #define pb push_back #define MK make_pair #define ll long long template<typename T> void read1(T &m) { T x=0,f=1; char ch=getchar(); while(ch<'0'||ch>'9') { if(ch=='-')f=-1; ch=getchar(); } while(ch>='0'&&ch<='9') { x=x*10+ch-'0'; ch=getchar(); } m = x*f; } template<typename T> void read2(T &a,T &b) { read1(a); read1(b); } template<typename T> void read3(T &a,T &b,T &c) { read1(a); read1(b); read1(c); } template<typename T> void out(T a) { if(a>9) out(a/10); putchar(a%10+'0'); } template<typename T> void outn(T a) { if(a>9) out(a/10); putchar(a%10+'0'); puts(""); } ///------------------------------------------------------------------------------------ int a,b; int mat[55][55]; int getsg(int mat[][55]) { bool ret[1005]; memset(ret,false,sizeof(ret)); rep0(i,0,a-1) rep0(j,0,b-1) if(mat[i][j]==0&&mat[i][j+1]==0&&mat[i+1][j]==0&&mat[i+1][j+1]==0) { mat[i][j]=mat[i+1][j+1]=mat[i+1][j]=mat[i][j+1]=1; ret[getsg(mat)] = true; mat[i][j]=mat[i+1][j]=mat[i][j+1]=mat[i+1][j+1]=0; } rep0(i,0,1005) if(!ret[i]) return i; } int main() { // freopen("in.txt","r",stdin); while(sin2(a,b)!=EOF) { rep0(i,0,a) rep0(j,0,b) scanf("%1d",&mat[i][j]); puts(getsg(mat)?"Yes":"No"); } return 0; }
相关文章推荐
- HDU_1760 A New Tetris Game(dfs + 博弈)
- Hdu 1760 A New Tetris Game
- HDU 1760 A New Tetris Game
- (step 8.2.12)hdu 1760(A New Tetris Game)
- A New Tetris Game - HDU 1760 博弈
- hdu 1760 A New Tetris Game(搜索博弈)
- HDU 1760 A New Tetris Game
- hdu 1760 A New Tetris Game 博弈论
- HDU 1760 A New Tetris Game(dfs + 博弈)
- SG 博弈论 hdu 1760 A New Tetris Game
- HDOJ 题目1760 A New Tetris Game(DFS,博弈)
- hdu 1809(A New Tetris Game(2)) 字符串hash+sg函数+DP
- HDU 1809 A New Tetris Game(2)
- 【HDOJ】1760 A New Tetris Game
- HDU 3435 A new Graph Game(二分图最优匹配:有向环覆盖)
- hdu1760 A New Tetris Game-----找sg 字符串
- HDU 3435 KM A new Graph Game
- HDU1760 A New Tetris Game【DFS】【博弈】
- HDU-3435 A new Graph Game
- HDU 3435 A new Graph Game(二分图最优匹配:有向环覆盖)