【题意分析】

  最简单的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. ie中datepicker赋值不成功

    解决办法:删除placeholder即可 比如我代码如下:

  2. Java中的LinkedList

  3. Shiro学习(24)在线回话管理

    有时候需要显示当前在线人数.当前在线用户,有时候可能需要强制某个用户下线等:此时就需要获取相应的在线用户并进行一些操作. 本章基于<第十六章 综合实例>代码构建. 会话控制器 Java代码 ...

  4. Shiro学习(17)OAuth2集成

    目前很多开放平台如新浪微博开放平台都在使用提供开放API接口供开发者使用,随之带来了第三方应用要到开放平台进行授权的问题,OAuth就是干这个的,OAuth2是OAuth协议的下一个版本,相比OAut ...

  5. 构造——cf1214E

    首先定义三元组(2*i-1,2*i,d),将n个三元组按d降序排列,然后取每个三元组的2*i-1连在一起,构成一条长为n-1的链 然后降序枚举每个三元组,把对应的2*i在链上合法的位置接上, 能保证一 ...

  6. Service5

    DHCP概述及原理• Dynamic Host Configuration Protocol  – 动态主机配置协议,由 IETF(Internet 网络工程师任务小组)组织制定,用来简化主机地址分配 ...

  7. Springboot Excle导入导出

    Springboot Excle导入导出 导入操作:Excle批量导入 导出操作:下载模版 开发笔记 pom.xml <!-- Excle相关jar --> <dependency& ...

  8. hive UDAF开发和运行全过程

    介绍 hive的用户自定义聚合函数(UDAF)是一个很好的功能,集成了先进的数据处理.hive有两种UDAF:简单和通用.顾名思义,简单的UDAF,写的相当简单的,但因为使用Java反射导致性能损失, ...

  9. js设计模式——1.代理模式

    js设计模式——1.代理模式 以下是代码示例 /*js设计模式——代理模式*/ class ReadImg { constructor(fileName) { this.fileName = file ...

  10. 【mac】配置sublime开发C

    1.sublime text3,Tools/Build System/New Build system创建一个新配置文件. {"cmd": ["gcc", &q ...