zoukankan      html  css  js  c++  java
  • 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 }
    代码君
  • 相关阅读:
    dijkstra最短路算法--模板
    k8s ansible自动化部署
    k8s persistenvolume 动态供给
    k8s 1.12二进制部署
    k8s 1.14.1 coredns部署
    django单表操作,增、删、改、查
    数据库基础
    TCP/IP协议 socket
    面向对象的程序设计
    模块
  • 原文地址:https://www.cnblogs.com/AOQNRMGYXLMV/p/4462937.html
Copyright © 2011-2022 走看看