(HDU-1564)Play a game(博弈论)

题目链接: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;
}

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值