zoukankan      html  css  js  c++  java
  • 洛谷 P4279 [SHOI2008]小约翰的游戏

    小约翰经常和他的哥哥玩一个非常有趣的游戏:桌子上有(n)堆石子,小约翰和他的哥哥轮流取石子,每个人取的时候,可以随意选择一堆石子,在这堆石子中取走任意多的石子,但不能一粒石子也不取,我们规定取到最后一粒石子的人算输。

    小约翰相当固执,他坚持认为先取的人有很大的优势,所以他总是先取石子,而他的哥哥就聪明多了,他从来没有在游戏中犯过错误。小约翰一怒之前请你来做他的参谋。自然,你应该先写一个程序,预测一下谁将获得游戏的胜利。

    简明题意就是Nim游戏取到最后一个石子的人输

    这个题是Anti-Nim

    我们先讨论最简单的胜负

    1:只有一堆石子且个数为(1),则后手胜

    2:每一堆石子都是(1),那么奇数个石子后手胜,偶数个石子先手胜

    3:只有一堆石子不是(1),其余每堆石子都是(1),那么先手一定可以选择取(n-1)(n)个来转移到2且为奇数的情况,所以先手胜

    4:正常情况,先手只要保证能通过选石子选到3就必胜,也就是自己选到最后一堆石子,那么就是Nim游戏了

    Code

    #include <iostream>
    #include <cstdio>
    #include <algorithm>
    #include <cstring>
    using namespace std;
    int T,n,ans,sm;
    int main()
    {
        scanf("%d",&T);
        int x;
        while (T--)
        {
            ans = 0;
            sm = 0;
            scanf("%d",&n);
            for (int i = 1;i <= n;i++)
                scanf("%d",&x),ans ^= x,sm += x;
            if (sm == n)
            {
                if (sm % 2 == 1)
                    printf("Brother
    ");
                else
                    printf("John
    ");
            }
            else
            if (ans)
                printf("John
    ");
            else
                printf("Brother
    ");
        }
        return 0;
    }
    
  • 相关阅读:
    剑指offer(18)二叉搜索树的后续遍历
    剑指offer(17)层次遍历树
    剑指offer(16)栈的压入、弹出序列
    剑指offer(15)
    剑指offer(14)
    剑指offer(13)
    剑指offer(12)
    剑指offer(11)
    2020 年 11 月编程语言排行榜,Python 势如破竹,超越 Java?
    Python 除了 time.sleep,你还有一个暂停代码的方法
  • 原文地址:https://www.cnblogs.com/sdlang/p/13625326.html
Copyright © 2011-2022 走看看