1-2-K Game

游戏规则: 有n个石子,两个人轮流取,取1,2,k个,取完胜
结论:
(1)若k%3 == 0,则n %= k + 1,若n == k,则a胜,否则忽略k转为巴什博弈。
(2)若k%3 == 1 或者 == 2,直接忽略k转为巴什博弈。
证明
情况1,将n分为n / (k + 1)堆的k+1和n%k+1的一堆。若对手取k或1,我都能使得这一回合取完k+1。若对手取2,我取2,这一轮的效果和取完k+1的效果是一样的,因为对于k-4的这一堆,对手无法使用k,那么我取要取完这一堆只要以3的倍数下降即可。所以策略为:我先尽量取完n%k+1的那一堆,对手取2时我取1,当然开始时先把余数取完。若对手不取2,我就可以消去k+1的一堆。当n%k+1的那一堆取完时,若对手还取2,我就取2。那么k-4的一堆又变成了3的倍数,用对付n%k+1的那一堆的方法解决即可。当然如果n%k+1为k,一开始直接取k即可。
情况2,k的作用与1或2的作用相同,忽略k即可。

/*
(1)若k%3 == 0,则n %= k + 1,若n == k,则a胜,否则忽略k转为巴什博弈。
(2)若k%3 == 1 或者 == 2,直接忽略k转为巴什博弈。 
*/ 

#include <cstdio>

int main()
{
	int t;
	scanf("%d",&t);
	while( t-- )
	{
		int n,k;
		scanf("%d%d",&n,&k);
		if( k % 3 )
		{
			if( n % 3 ) printf("Alice\n");
			else printf("Bob\n");
		} 
		else
		{
			n %= (k+1);
			if( n == k ) printf("Alice\n");
			else if( n % 3 ) printf("Alice\n");
			else printf("Bob\n");
		}
	}
	return 0;
 } 

巴什博弈的推广,同样若可取范围为[1,m],k,也可用同样策略。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值