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

传送门

题目大意:反Nim游戏,即取走最后一个的人输

首先状态1:如果所有的堆都是1,那么堆数为偶先手必胜,否则先手必败

然后状态2:如果有两个堆数量相同且不为1,那么后手拥有控场能力,即:

若先手拿走一堆,那么后手可以选择将另一堆留下1个或者全拿走,使这两堆最终只剩1个或0个;

若先手将一堆拿剩一个,那么后手可以选择将另一堆留下一个让先手拿或全拿走,使这两堆最终只剩1个或0个;

若先手将一堆拿走一部分,那么后手可以将另一堆同样拿走一部分,然后同上

状态3:若Xor!=0 那么先手可以先拿走一部分让Xor=0 然后同状态2先手必胜 否则先手必败

鉴于本人智商余额严重不足,以上内容仅存在参考价值,无法证明正确性,欢迎指正

于是若所有堆全是1 Xor==0先手必胜 否则后手必胜

若有堆不是1 Xor==0后手必胜 否则先手必胜

var
  t,i,j,n,sg,fl,x:longint;
begin
  read(t);
  for i:=1 to t do begin
    read(n); sg:=0; fl:=0;
    for j:=1 to n do begin
      read(x); sg:=sg xor x;
      if (x<>1) then fl:=1;
    end;
    if (sg+fl=0) or ((sg<>0) and (fl<>0)) then writeln('John') else writeln('Brother');
  end;
end.



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值