【题意分析】

  最简单的Anti-Nim博弈模型。

【解题思路】

  引理:SJ定理

对于一个Anti-Nim游戏,只要有以下两条条件之一,先手必胜:

1.游戏的总SG函数为0且任意子游戏的SG函数不超过1;

2.游戏的总SG函数不为0且至少存在一个子游戏的SG函数超过1。

证明:

定义xorsum(x)(Q)为满足布尔表达式Q的所有元素x的异或和。

设游戏总SG函数为X,子游戏的SG函数序列为L,分四种情况:

(1)X=0且∀n≤1(n∈L)(必胜态)

(2)X=0且存在n∈L使n>1(必败态)

(3)X≠0且∀n≤1(n∈L)(必败态)

(4)X≠0且存在n∈L使n>1(必胜态)

对于情况(1),

  ∵X=0,∀n≤1

  ∴∑n=0(mod 2)即有偶数个1

  此时双方只能有唯一的走法,模拟即可知先手必胜。

对于情况(2),

  ∵X=0,存在n∈L使n>1

  ∴∑[n≤1]=0(mod 2)且xorsum(n)=0(n∈L,n>1)

  ∴∑[n>1]≥2即L至少有两个大于1的元素

  故此状态经过一次操作后必定转移到必胜态(4),即必败。

对于情况(3),同理于情况(1),但结果状态是必败。

对于情况(4),

  当存在唯一的n∈L使n>1时,总能转移成必败态(3);

  当存在至少两个n∈L使n>1时,

    设X的最高位为t=2k(k∈N),必定存在一个n∈L,使n and t=1,易知(n xor t)<n,可将n变为(n xor t),而剩下子游戏的总SG函数亦为(t xor n),故可以转化为必败态(2);

  综上,(4)为必胜态。

证毕。

  直接应用SJ定理即可,复杂度O(TN)。

【参考代码】

 #include <cstdio>
#define REP(i,low,high) for(register int i=(low);i<=(high);++i)
using namespace std;
static int T,n; int a[];
int main()
{
for(scanf("%d",&T);T--;)
{
scanf("%d",&n); int sum=; bool over=;
REP(i,,n)
{
int t; scanf("%d",&t),sum^=t,over|=t>;
}
puts(bool(sum)==over?"John":"Brother");
}
return ;
}

bzoj1022题解的更多相关文章

  1. 【BZOJ1022】小约翰的游戏(博弈论)

    [BZOJ1022]小约翰的游戏(博弈论) 题面 BZOJ 题解 \(Anti-SG\)游戏的模板题目. #include<iostream> #include<cstdio> ...

  2. 2016 华南师大ACM校赛 SCNUCPC 非官方题解

    我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...

  3. noip2016十连测题解

    以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...

  4. BZOJ-2561-最小生成树 题解(最小割)

    2561: 最小生成树(题解) Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1628  Solved: 786 传送门:http://www.lyd ...

  5. Codeforces Round #353 (Div. 2) ABCDE 题解 python

    Problems     # Name     A Infinite Sequence standard input/output 1 s, 256 MB    x3509 B Restoring P ...

  6. 哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解

    题目链接 提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5 1470-1482 只做出来四道比较水的题目,还需要加强中等题的训练 ...

  7. 2016ACM青岛区域赛题解

    A.Relic Discovery_hdu5982 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Jav ...

  8. poj1399 hoj1037 Direct Visibility 题解 (宽搜)

    http://poj.org/problem?id=1399 http://acm.hit.edu.cn/hoj/problem/view?id=1037 题意: 在一个最多200*200的minec ...

  9. 网络流n题 题解

    学会了网络流,就经常闲的没事儿刷网络流--于是乎来一发题解. 1. COGS2093 花园的守护之神 题意:给定一个带权无向图,问至少删除多少条边才能使得s-t最短路的长度变长. 用Dijkstra或 ...

随机推荐

  1. spring security学习总结

    这几天一直在学习spring security的相关知识.逛各大论坛,看相关api与教学视频,获益良多! 简介 Spring Security是为基于Spring的企业应用系统提供声明式的安全访问控制 ...

  2. Java中的时间日期Date和Calendar

    日期时间类 Date: Date类的构造方法: 可以发现Date类的toString方法被重写了. Date类的方法: SimpleDateFormat 它提供了解决Date输出问题的解决方案--格式 ...

  3. 分布式项目中增加品牌前端页面出现Uncaught Error: [$injector:modulerr] bug后的原因以及改正方式

    分布式查询品牌页面时 controller路径正确访问,比如输入 http://localhost:8081/brand/findPage.do?page=3&rows=6 是可以正常显示数据 ...

  4. cookie和session 的初步介绍

    Cookie和Session http协议不保存用户状态(信息) Cookie和Session都是为了能够保存用户信息 Cookie: 本质:保存在浏览器上的键值对 用途:标识当前用户信息 cooki ...

  5. PHP ftp_mdtm() 函数

    ftp_mdtm() 函数返回指定文件的最后修改时间. 该函数将以 Unix 时间戳的形式返回文件的最后修改时间,如果出错则返回 -1. 语法 int ftp_mdtm ( resource $ftp ...

  6. mysql8.*忘记密码

    1.关闭mysql服务 2.打开cmd窗口,找到安装目录下的bin然后复制命令 mysqld --console --skip-grant-tables --shared-memory 3.再打开一个 ...

  7. eclipse中server name选项变灰

    删除workspace中.metadata\.plugins\org.eclipse.core.runtime\.settings目录下 org.eclipse.wst.server.core.pre ...

  8. 探索C++的秘密之详解extern

    转载:http://developer.51cto.com/art/200704/46843.htm C和C++对函数的处理方式是不同的.extern "C"是使C++能够调用C写 ...

  9. python安装 cvxpy 巨坑,一堆C++错误

    https://www.lfd.uci.edu/~gohlke/pythonlibs/#ecos 下载scs,ecos,cvxpy的whl,一个个安装即可 之前被一堆C++错误搞晕了2小时

  10. scrapy主要防止封IP策略

    scrapy如果抓取太频繁了,就被被封IP,目前有以下主要策略保证不会被封: 策略1:设置download_delay下载延迟,数字设置为5秒,越大越安全 策略2:禁止Cookie,某些网站会通过Co ...