题目链接: (bzoj) https://www.lydsy.com/JudgeOnline/problem.php?id=1022

(luogu) https://www.luogu.org/problemnew/show/P4279

题解:

大力出奇迹系列。。

我找了一小时规律,瞎猜了一个结论,看着都不靠谱,结果它居然过了。。。。

结论: 若所有\(a_i\)都等于\(1\), 则后手必胜当且仅当\(n\)是奇数;否则后手必胜当且仅当所有\(a_i\)异或和为\(0\).

既然对了那就口胡一个证明:

(1) 当所有\(a_i\)都为\(1\)时,后手必胜当且仅当\(n\)是奇数,显然。

(2) 否则,如果大于\(1\)的数恰好有\(1\)个,那么如果\(n\)是奇数,则把大于\(1\)这一堆拿成\(1\), 否则把大于\(1\)这一堆拿成\(0\)即可,因此先手必胜。

(3) 如果大于\(1\)的数多于\(1\)个呢?我们发现第(2)种情况的结论符合Nim游戏的一般结论(后手必胜当且仅当异或和为\(0\)),而对于任何一个大于\(1\)的数恰好有\(1\)个的状态,不可能一步变成所有数都等于\(1\), 因此情况(1)不会影响到情况(3)。故大于\(1\)的数多于一个时,依然符合Nim游戏的一般结论。

记住,博弈论千万不要死抓着SG函数不放!胜负分析才是最本质的,另外有时候需要转化模型(如AGC002E).

代码

#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cassert>
#include<iostream>
using namespace std; inline int read()
{
int x=0; bool f=1; char c=getchar();
for(;!isdigit(c);c=getchar()) if(c=='-') f=0;
for(; isdigit(c);c=getchar()) x=(x<<3)+(x<<1)+(c^'0');
if(f) return x;
return -x;
} int n; int main()
{
int T; scanf("%d",&T);
while(T--)
{
int n; scanf("%d",&n);
int x=0,c=0;
for(int i=1; i<=n; i++) {int a; scanf("%d",&a); x^=a; c+=(a==1)?1:0;}
if(c==n)
{
if(n&1) printf("Brother\n"); else printf("John\n");
}
else
{
if(x==0) printf("Brother\n"); else printf("John\n");
}
}
return 0;
}

最新文章

  1. sqlplus运行sql文件
  2. C++动态加载DLL调用方法
  3. ace布置小作业: 制作一个简单的电话号码归属地查询软件:JSON解析和Volly发送get请求
  4. Android下拉上滑显示与隐藏Toolbar另一种实现
  5. ios开发之OC基础-oc小程序
  6. 【分享】01. Eclipse for PHP + phpStudy 搭建php开发环境
  7. nginx负载均衡简单配置
  8. Microsoft Graph Web应用程序极致开发体验
  9. (light oj 1102) Problem Makes Problem (组合数 + 乘法逆元)
  10. Sublime Text 执行后只有运行时间,没有执行结果!解决方法!
  11. MVC Post 提交表单 允许他提交参数包含html标记的解决方法
  12. js判断字符串是否在数组中
  13. 学习刘伟择优excel视频
  14. Linux发邮件
  15. 解决error possibly undefined macro AC_MSG_ERROR
  16. redis集群环境搭建的错误
  17. SQL语句整理(一) 数据库查询语言DQL
  18. MQ中将消息发送至远程队列的配置
  19. HTML/JSP中一些单书名号标签的用途&lt;%-- --%&gt;&lt;!-- --&gt;&lt;%@ %&gt;&lt;%! %&gt;&lt;% %&gt;&lt;%= %&gt;
  20. Grideview总结

热门文章

  1. etcd租约机制
  2. Jackson快速入门
  3. Windows下备份mysql
  4. numpy使用数组进行数据处理
  5. 最长不下降/不上升子序列&amp;&amp;最长上升/下降子序列
  6. CS起源:实现狙击子弹加速
  7. P4304 [TJOI2013]攻击装置
  8. [转载]关于机器上已安装CUDA,但在anaconda下tensorflow出现cudaGetDevice() failed问题的解决
  9. [转载]Oracle之单引号与双引号
  10. Flask开发系列之数据库操作