题目链接:Play a game - HDU 1564 - Virtual Judge (ppsucxtt.cn)
题目大意:给你一个n*n的方格,在四个角落的其中一个放一块石头,ailyanlu和8600两个人轮流操作,每次可以把石头水平或竖直移动一格,前提是这个方格之前未放过石头,最后谁不能移动谁就输了。
分析:我们对方格的边长分奇数和偶数进行分析:
当n是奇数时,以3为例,不妨假设石头在左下角
观察可得,当n为奇数时,整个方格除了石头的位置之外,都可以用1*2的小长方块覆盖
对于先手来说他只能把石头向右或向上移动一次,这样后手可以移动到小长方块的另一个位置,这样先手必输。
下面分析当n是偶数的情况:以n等于4,石头在左下角为例:
整个方格可以被1*2的小长方块覆盖,这样先手可以第一次把石头移至小长方块的另一端,这样每次后手都会进入一个全新的小长方块,这样先手就可以将石头移至小长方块的另一端,这样操作下去先手必胜。
总的来说,当n为奇数时,除了小石头本身所在的位置外,其余位置都可以用1*2的小长方块覆盖,这样每次都是先手第一次踏入一个全新的小长方块,这样先手必输。
当n为偶数时,先手可以第一次移至石头所在小长方块的另一端,这样每次踏入一个全新的小长方块的人就是后手,这样先手必胜。
分析完了,下面是代码:
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<queue>
using namespace std;
int main()
{
int n;
while(1)
{
scanf("%d",&n);
if(n==0) break;
if(n&1) puts("ailyanlu");
else puts("8600");
}
return 0;
}