POJ 2484博弈——对称法

题目链接http://poj.org/problem?id=2484

题意:Alice和Bob玩游戏,从一堆圆环形排列的硬币中拿硬币,每次可以拿一个或者两个,但必须拿连续的(两个中间有空位也视为不连续),Alice先手,给定硬币个数,问谁赢。

题解

当n=1或者n=2时,Alice可以一下子取走所有的硬币,获胜。

当n>=3时,Alice不管取多少硬币,她会把原来的圆环搞出一个缺口,这样就变成了一条链,而此时Bob如果把这条链分成两条长度相等的链(如果Alice取完后剩奇数个硬币,Bob就去最中间的那个,若是偶数,则取最中间的两个)。当Bob取完使两条链长度相同时,以后的每次操作,Bob只需跟着Alice的取法在另一条链里取即可。这样始终是Bob取完最后的硬币,Alice输。

#include <cstdio>
int main(){
	int n;
	while(scanf("%d", &n), n){
		if(n <= 2)
			printf("Alice\n");
		else
			printf("Bob\n");
	}
 
	return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_21989927/article/details/81474559