• P4279 【[SHOI2008]小约翰的游戏】


    我怎么什么都不会啊(QAQ)博弈论怎么和期望一样玄学啊(QAQ)

    我们分几种情况讨论:

    (Case1):只有一堆且为1,那么后手胜利

    (Case2):每一堆都是1,那么只需要判断奇偶性,奇数则先手败,偶数则后手败

    (Case3):只有一堆不是1,其余堆都是1,那么可以根据就行,先手可以选择是拿完或是那得只剩一个

    (Case4):一般情况,思考怎么转化成(Case 1-3)

    现在题意是说:给定K堆,先手想要自己去到最后一堆他就会胜利((Case3)),这不就变成(nim)游戏了吗?

    于是只需要把每一堆的权值异或起来即可

    (Code:)

    #include<bits/stdc++.h>
    using namespace std;
    int read() {
        int x = 0, f = 1; char c = getchar();
        while(c < '0' || c > '9') { if(c == '-') f = -1; c = getchar();}
        while(c >= '0' && c <= '9') x = x * 10 + c - 48, c = getchar();
        return x * f;
    }
    int main() {
        int T = read();
        while(T --) {
            int n = read(), x, ans = 0, sum = 0;
            for(int i = 1; i <= n; ++ i) x = read(), ans ^= x, sum += x;
            if(sum == n) puts(n & 1 ? "Brother" : "John");
            else puts(ans ? "John" : "Brother");
        }
    	return 0;
    }
    
    
  • 相关阅读:
    Flask11 Session、CSRF、注销session、利用端点自动跳转
    python学习笔记4-时间函数
    python学习笔记3-循环1
    python学习笔记2-条件语句
    python学习笔记1-基础语法
    sprintf系列函数
    sscanf非常的重要
    c++中.c_str和.c_data
    c++Map用法
    c语言sscanf总结
  • 原文地址:https://www.cnblogs.com/bcoier/p/11774635.html
Copyright © 2020-2023  润新知