标签:
(1)巴什博弈
有一堆n个物品,两个人轮流从这堆物品中取物,规定每次至少取一个,最多取m个。最后取光者得胜。
这个游戏是有规律的,并且每个人都采取理智最优的话,游戏一开始就决定了胜负。
与之类似的是报数,从1开始报,最少报数加一个,最多报数加3个,谁先报到20谁赢。
第一个人无论是报1,2,3,第二个人每次取4的倍数都是可以的。如此往复一定是第二个人赢。
即存在公式:N=(K+1)*X+M
在本例中K=3,N=20,那么X=5,M=0,如此一来一定是第二个人赢,而如果M!=0,则第一个人报M,第二个人无论报多少,第一个人再重新报M+(K+1),如此第一个人是必胜的。
例子:
http://acm.hdu.edu.cn/showproblem.php?pid=4764
代码:
1 #include<iostream> 2 using namespace std; 3 4 int main() 5 { 6 int N,K; 7 while(scanf("%d%d",&N,&K)) 8 { 9 if(N==0)break; 10 else 11 { 12 if((N-1)%(K+1)==0) 13 printf("Jiang\n"); 14 else 15 printf("Tang\n"); 16 } 17 } 18 return 0; 19 }
标签:
原文地址:http://www.cnblogs.com/holyprince/p/4263245.html