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 }