• 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
    ");
     8         else printf("Alice
    ");
     9     }
    10     return 0;
    11 }
  • 相关阅读:
    C++ mutex&&RWlock
    一个资源池模型
    C++安全编码摘录
    C++点滴
    git常用命令(转)
    ASN.1
    TDOA泰勒级数法
    teamviewer解除最大通话限制-特别破解版(转)
    剑指offer——旋转数组的最小数字
    常见的相关分析方法——结合实例
  • 原文地址:https://www.cnblogs.com/fenshen371/p/3288007.html
Copyright © 2020-2023  润新知