• HDU 3951 (博弈) Coin Game


    先考虑两种简单的情况:

    • 如果先手能一次把硬币拿完,即 k >= n ,那么先手胜
    • 如果每次只能拿一个硬币, 即 k = 1 ,那么如果有奇数个硬币先手胜,如果有偶数个硬币后手胜。

    剩下的情况就是先手一次拿不完,而且每次可以拿一个或者拿两个硬币。

    剩下的硬币会变成一条链,如果后手能拿完最好,不能拿完的话就拿一个或两个硬币使这条链变成长度相等的两条。

    这一定是能做到的,

    因为如果这条链有奇数个硬币,那么拿走中间的那个;

    如果有偶数个硬币,拿走中间的两个。

    变成相等的两条链之后,先手在哪条链拿走多少个硬币,后手就在另外一条链中拿走同样的硬币,直到拿完所有的硬币。

    因此后手必胜。

     1 #include <cstdio>
     2 
     3 int main()
     4 {
     5     //freopen("in.txt", "r", stdin);
     6 
     7     int T; scanf("%d", &T);
     8     for(int kase = 1; kase <= T; kase++)
     9     {
    10         int n, k;
    11         scanf("%d%d", &n, &k);
    12         printf("Case %d: ", kase);
    13         bool first;
    14         if(k == 1) first = n & 1 ? true : false;
    15         else if(k >= n) first = true;
    16         else first = false;
    17         printf("%s
    ", first ? "first" : "second");
    18     }
    19 
    20     return 0;
    21 }
    代码君
  • 相关阅读:
    团队作业3--需求改进&系统设计
    需求分析&原型设计
    团队项目作业1-团队展示
    结对编程
    APP案例分析之华为浏览器
    四则运算生成器做法思路
    关于PHP使用GD库生成的验证码无法在别处显示
    第二次课程心得
    两个程序代码
    5.8下午
  • 原文地址:https://www.cnblogs.com/AOQNRMGYXLMV/p/4462937.html
Copyright © 2020-2023  润新知