题意:给你一个n*m的矩形,之后两个人轮流切谁切出1*1的矩形谁赢,问你给你n*m的矩形先手是胜利还是失败
思路:一个二维的SG函数打一个表就好了代码:
代码:
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
const int maxn = 200+10;
int SG[maxn][maxn];
int vis[maxn];
void init()
{
for(int i = 2 ; i <= maxn ; i++) // 行
{
for(int j = 2 ; j <= maxn ; j++)// 列
{
memset(vis,0,sizeof(vis));
for(int k = 2; k< i - 1 ;k++) //切那一行
{
vis[SG[k][j] ^ SG[i-k][j]] = 1;
}
for(int k = 2 ; k < j - 1 ;k++) //切那一列
{
vis[SG[i][k] ^ SG[i][j-k]] = 1;
}
for(int k = 0 ; ;k++)
{
if(!vis[k])
{
SG[i][j] = k;
break;
}
}
}
}
}
int main()
{
int n,m;
init();
while(scanf("%d%d",&n,&m)!=EOF)
{
if(SG[n][m] == 0) puts("LOSE");
else puts("WIN");
}
}