n*m的棋盘,每一行有一个黑子一个白子,每次可以选择我方棋子,在不跨越对方棋子的前提下移动到任何位置,最先不能移动的一方输。求先手胜败。
可以想到,每行棋子两两相邻的状态是一个必败态,因为先手无论怎么动,后手都可以继续贴住对方的棋子,直到先手无路可走,那么就可以以每行黑白子之间的距离作为sg值。
#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
using namespace std;
typedef long long ll;
int n,m,ans;
int main()
{
int x,y;
while(~scanf("%d%d",&n,&m))
{
int ans=0;
for (int i=1;i<=n; i++)
scanf("%d%d",&x,&y),ans^=(abs(x-y)-1);
if (!ans) puts("BAD LUCK!");
else puts("I WIN!");
}
return 0;
}