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;
}
posted @   RioTian  阅读(155)  评论(0编辑  收藏  举报
编辑推荐:
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
阅读排行:
· Obsidian + DeepSeek:免费 AI 助力你的知识管理,让你的笔记飞起来!
· 分享4款.NET开源、免费、实用的商城系统
· 解决跨域问题的这6种方案,真香!
· 一套基于 Material Design 规范实现的 Blazor 和 Razor 通用组件库
· 5. Nginx 负载均衡配置案例(附有详细截图说明++)
点击右上角即可分享
微信分享提示