BZOJ 1022 小约翰的游戏(anti-sg)
2024-08-24 10:49:11
这是个anti-sg问题,套用sj定理即可解。
SJ定理
对于任意一个Anti-SG游戏,如果定义所有子游戏的SG值为0时游戏结束,先手必胜的条件:
1、游戏的SG值为0且所有子游戏SG值均不超过1。
2、游戏的SG值不为0且至少一个子游戏SG值超过1。
# include <cstdio>
# include <cstring>
# include <cstdlib>
# include <iostream>
# include <vector>
# include <queue>
# include <stack>
# include <map>
# include <set>
# include <cmath>
# include <algorithm>
using namespace std;
# define lowbit(x) ((x)&(-x))
# define pi acos(-1.0)
# define eps 1e-
# define MOD
# define INF (LL)<<
# define mem(a,b) memset(a,b,sizeof(a))
# define FOR(i,a,n) for(int i=a; i<=n; ++i)
# define FO(i,a,n) for(int i=a; i<n; ++i)
# define bug puts("H");
# define lch p<<,l,mid
# define rch p<<|,mid+,r
# define mp make_pair
# define pb push_back
typedef pair<int,int> PII;
typedef vector<int> VI;
# pragma comment(linker, "/STACK:1024000000,1024000000")
typedef long long LL;
int Scan() {
int res=, flag=;
char ch;
if((ch=getchar())=='-') flag=;
else if(ch>=''&&ch<='') res=ch-'';
while((ch=getchar())>=''&&ch<='') res=res*+(ch-'');
return flag?-res:res;
}
void Out(int a) {
if(a<) {putchar('-'); a=-a;}
if(a>=) Out(a/);
putchar(a%+'');
}
const int N=;
//Code begin... int main ()
{
int T, n, x;
scanf("%d",&T);
while (T--) {
int ans=, flag=;
scanf("%d",&n);
FOR(i,,n) {
scanf("%d",&x);
ans^=x;
if (x>) flag=;
}
if ((flag==&&ans==)||(flag&&ans)) puts("John");
else puts("Brother");
}
return ;
}
最新文章
- html与Android——webView
- Microsoft Azure News(5) Azure新DV2系列虚拟机上线
- jQuery实现长按按钮触发事件的方法
- java中static作用详解
- SAP ST05数据跟踪使用
- Java三大主流开源工作流引擎技术分析
- 【MongoDb--初入江湖】windows下安装MongoDb
- JAVADOC时候乱码-编码 GBK 的不可映射字符
- css3之@font-face---再也不用被迫使用web安全字体了
- [PWA] 0. Introduce to Offline First
- 线程间操作无效: 从不是创建控件&ldquo;textBox2&rdquo;的线程访问它
- 通过xrdp服务实现windows远程桌面连接树莓派
- 指针变量的*p,p以及&;p的区别
- Linux下MySQL备份以及crontab定时备份
- Vue使用过程中常见问题
- poj-1807(最大流)
- Struts2配置。
- [转]调整 VirtualBox 虚拟机的磁盘大小
- HTML 标题标签
- php reids 单机命令