题目链接:hdu 2147
定义两个状态:
P:面对P时先手必输
N:面对N时先手必胜
PN点的确定规则:如果一个点能转换到的所有点都是N,那么此点状态为P。
若能转化到一个P,即使对手面临必输状态,此点为N
所以从终点开始,先确定横纵坐标分别为1的点的状态,在确定中间点的状态。
找到规律就能确定n,m点的状态了
例:5*5的矩阵pn图
P N P N P
N N N N N
P N P N P
N N N N N
P N P N P
#include<iostream>
#include<cstdio>
#include<vector>
#include<set>
#include<map>
#include<string.h>
#include<cmath>
#include<algorithm>
#include<queue>
#include<stack>
#define LL long long
#define mod 1000000007
#define inf 0x3f3f3f3f
#define sqr(a) (a)*(a)
#define lan(a,b) memset(a,b,sizeof(a))
using namespace std;
int main()
{
int n,m;
while(~scanf("%d%d",&n,&m))
{
if(n==0&&m==0)
break;
if(n&1&&m&1)
printf("What a pity!\n");
else
printf("Wonderful!\n");
}
return 0;
}
本文解析了HDU2147这道博弈论题目,通过定义P/N状态来判断玩家胜负条件,并给出了具体的实现代码示例。
3154

被折叠的 条评论
为什么被折叠?



