POJ 2484 A Funny Game [博弈]

题意:n枚硬币围成一个圈,每次每个人可以从中取走一枚或者相邻的两枚(如果两枚硬币原本中间隔着一枚硬币,后来被取走,这两枚硬币不算相邻)。谁取走最后一枚硬币谁就赢了。

思路:我们可以找找规律。

首先,n为1和2的时候肯定是先手胜。n为3时,无论先手取1枚还是2枚,都会输。

当n大于等于4时,我们分成两种情况来讨论。

如果n为偶数,对于后手来说,总可以根据先手的做法,在对称的位置取走相同数量的硬币。先手必输。

如果n为奇数,对于后手来说,总可以在某处取走硬币后,使得剩下的硬币分成对称的两组,然后依照n为偶数时的策略就能赢。此时也是先手必输。下面举个例子,假设n为5时,后手的策略如下图:

 

 

 

PS:终于明白为什么这题叫a funny game了,因为它是个不公平的游戏,太不公平了。。

 

 1 #include<stdio.h>
 2 int main()
 3 {
 4     int n;
 5     while (~scanf("%d", &n) && n)
 6     {
 7         if (n > 2) printf("Bob\n");
 8         else printf("Alice\n");
 9     }
10     return 0;
11 }

 

posted @ 2013-08-28 21:36  fenshen371  阅读(348)  评论(0编辑  收藏  举报