zoukankan      html  css  js  c++  java
  • CodeForces-1147C Thanos Nim 博弈 思维

    CodeForces-1147C Thanos Nim 博弈 思维

    题意

    有偶数(n) 堆石子,每次必须选择(n/2) 堆并每堆至少取出(1) 堆石子,当不能取石子时判定为输。

    分析

    当某人把某堆变为0时就面临必败局面,这是因为下一个人只需要把任意(n/2) 堆变为(0) ,下一个就无法选出(n/2)堆了。

    此题结论,令(m) 为最小的石子数,若(cnt_m > n / 2) 时,后手必胜,因为先手无论怎么选择,都至少要选到(m) ,此时后手总可以保持最小的堆数 $ > n / 2$ ,这样最终总是先手先把最小堆数的大小变为(0)

    (cnt_m leq n / 2) ,先手只需要把局面变为(cnt_m > n / 2) 即可

    代码

    int a[55];
    
    int main() {
        int n = readint();
        for (int i = 0; i < n; i++) a[i] = readint();
        sort(a, a + n);
        int cnt = 1;
        for (int i = 1; i < n; i++) {
            if (a[i] != a[0]) break;
            else cnt++;
        }
        if (cnt > n / 2) puts("Bob");
        else puts("Alice");
    }
    
  • 相关阅读:
    pymongo 学习
    Mongodb 学习
    2个list取交集
    2个list取差集
    yaml 基础
    is 和 ==的区别
    软件测试人员需要掌握的linux命令(二)
    免费翻译API破解(简易翻译工具)
    测试面试解析
    Python之Time模块
  • 原文地址:https://www.cnblogs.com/hznumqf/p/13616141.html
Copyright © 2011-2022 走看看