首页 > 其他分享 >BZOJ 1022: [SHOI2008]小约翰的游戏John SG函数 Anti−SG

BZOJ 1022: [SHOI2008]小约翰的游戏John SG函数 Anti−SG

时间:2023-07-07 13:32:19浏览次数:48  
标签:游戏 1022 石子 flag 小约翰 John SG



1022: [SHOI2008]小约翰的游戏John


Time Limit: 1 Sec  Memory Limit: 162 MB

Submit: 2667  Solved: 1701

[Submit][Status][Discuss]

Description


  小约翰经常和他的哥哥玩一个非常有趣的游戏:桌子上有n堆石子,小约翰和他的哥哥轮流取石子,每个人取的时候,可以随意选择一堆石子,在这堆石子中取走任意多的石子,但不能一粒石子也不取,我们规定取到最后一粒石子的人算输。小约翰相当固执,他坚持认为先取的人有很大的优势,所以他总是先取石子,而他的哥哥就聪明多了,他从来没有在游戏中犯过错误。小约翰一怒之前请你来做他的参谋。自然,你应该先写一个程序,预测一下谁将获得游戏的胜利。


Input


  本题的输入由多组数据组成第一行包括一个整数T,表示输入总共有T组数据(T≤500)。每组数据的第一行包括一个整数N(N≤50),表示共有N堆石子,接下来有N个不超过5000的整数,分别表示每堆石子的数目。


Output


  每组数据的输出占一行,每行输出一个单词。如果约翰能赢得比赛,则输出“John”,否则出“Brother”,请注意单词的大小写。


Sample Input


2
3
3 5 1
1
1


Sample Output


John
Brother




这应该是Nim裸题

SG函数就是每堆的石子树

没啥说的

可以粘一下SJ定理


SJ定理

对于任意一个Anti−SG游戏,如果定义所有子游戏的SG值为0时游戏结束,先手必胜的条件: 

游戏的SG值为0且所有子游戏SG值均不超过1。 
游戏的SG值不为0且至少一个子游戏SG值超过1。
本题容易看出SG(x)=x然后就不需要多说了


#include <bits/stdc++.h>
using namespace std;
int main()
{
    int t, n, x, sg;
    bool flag;
    scanf("%d", &t);
    while(t--)
    {
        scanf("%d", &n);
        sg = flag = false;
        for(int i = 1; i <= n; ++i)
        {
            scanf("%d", &x);
            sg ^= x;
            if(x > 1) flag = true;
        }
        if(flag == (bool)sg) puts("John");
        else puts("Brother");
    }
    return 0;
}




标签:游戏,1022,石子,flag,小约翰,John,SG
From: https://blog.51cto.com/u_16181403/6652023

相关文章

  • eclipse 如何通过OSGI 服务从一个插件给另一个插件发通知
    注册服务:BundleContextbundleContext=FrameworkUtil.getBundle(当前类.class).getBundleContext();EventHandlereventCreateNewConfigEventHandler=newEventHandler(){ @Override publicvoidhandleEvent(finalorg.osgi.service.event.Eventevent){ doSomet......
  • Nginx+Uwsgi+Django+Mysql部署项目
    第一章、准备工作第1节、创建项目目录准备好项目代码,将代码上传至myprojectmkdirmyproject第2节、安装python3cd/usr/local/mkdirPythonwgethttps://www.python.org/ftp/python/3.8.0/Python-3.8.0.tgztar-zxvfPython-3.8.0.tgzmkdir/usr/local/Python/py3_p......
  • BSGS算法
    今天刚学了个算法:BSGS算法(Baby-StepGiant-Step),即大步小步算法。常用于求解离散对数问题。该算法可以在\(O(\sqrtp)\)的时间内求解形如:\(a^{x}\equivb\pmod{p}\)的高次同余方程。问题:P3846[TJOI2007]可爱的质数/【模板】BSGS给定整数\(a,b,p\)互质,求满足\(a^{x}\equ......
  • Python信贷风控模型:Adaboost,XGBoost,SGD, SVC,随机森林, KNN预测信贷违约支付|附代码
    要求撰写关于信贷风控模型的研究报告,包括一些图形和统计输出。在此数据集中,我们必须预测信贷的违约支付,并找出哪些变量是违约支付的最强预测因子?以及不同人口统计学变量的类别,拖欠还款的概率如何变化?有25个变量:ID: 每个客户的IDLIMIT_BAL: 金额SEX: 性别(1=男,2=女)4.教育程......
  • 什么是 CSR、SSR、SSG、ISR - 渲染模式详解
    本文以React、Vue为例,介绍下主流的渲染模式以及在主流框架中如何实现上述的渲染模式。前置知识介绍看渲染模式之前我们先看下几个主流框架所提供的相关能力,了解的可跳到下个章节。挂载组件到DOM节点这是主流框架最基本的能力,就是将组件渲染到指定的DOM节点上。在React......
  • OSG初学者入门以及demo 示例
    根节点有很多分支,每个分支可以再有分支,每个分支点最上层的节点可以被看作该分支的根节点,用于管理整个分支的状态信息(光照,融合,透明等),为Node类型,一般使用Group;每个分支末端会是一个叶节点,叶结点用于管理绘制体,叶结点为Geode或其继承类(Billboard)可绘制体保存有绘制信息,例如几何体,文字,......
  • PMSG永磁同步发电机并网仿真模型 主要包括发电机、整流器、逆变器(双pwm控制)、电网、控
    PMSG永磁同步发电机并网仿真模型(1)主要包括发电机、整流器、逆变器(双pwm控制)、电网、控制、显示等部分;(2)风机最大功率跟踪mppt采用最佳叶尖速比法;(3)机侧控制(发电控制):采用转速、电流双闭环控制,均采用PI,磁链解耦;调制策略采用SVPWM;(4)网侧控制(并网控制):采用电压、电流双闭环控制,均采......
  • 牛客练习赛112 B qsgg and Subarray
    这里介绍两种解法,贪心和二分核心:只要某一个区间和为0,则所有包含该区间的和都为0贪心根据题意是求出所有⊕和为0的子区间的个数,我们按a[i]来分类,每次求出以a[i]为末尾,区间和为0的区间个数,对于a[i]来说,要想u~i的区间和为0,则需要包含所有a[i]中位为1都有0与之对应,如果u~i的区间和......
  • django项目在windows的部署(apach+Mod_wsgi+django)
    如果django项目如果要正式使用,我们需要将项目部署到开发环境上去。django项目自带的服务不支持多线程,会出现多个用户访问时,页面卡死,半天打不开的问题。所以,该如何部署django项目呢?下边是我的部署经验,实测有效。如果可以的话,尽量部署到linux上,但是我的系统中涉及到一些window文件......
  • csgo服务端运维总结
    简述通过LinuxGameServerManagers来管理运行。安装csgo服务端请参考:根据lgsm官网指引进行安装注意,过程中如果因为网络原因下载较慢不要急,超时后会选取备用线路网速就正常了,如果失败了就重新来过,下载过的就不会重新下载。大致流程是获取到linuxgsm.sh,然后bashlinuxgsm.sh......