[恢]hdu 1907

2011-12-28 09:47:29

地址:http://acm.hdu.edu.cn/showproblem.php?pid=1907

题意:n堆石子,每次取走其中一堆的任意颗,最后一个取的人败,求判局势。

mark:anti-nim,开始以为很简单,其实很难分析,搞了好久。具体可以参见2009年国家集训队贾志豪的论文。

这里先给出anti-nim的结论:

先手必胜当且仅当:1)sg值为0且不存在一堆sg值大于1;2)sg不为0且存在至少一堆sg值大于1。

代码:

# include <stdio.h>


int main ()
{
int T, n, num, sg, flag ;
scanf ("%d", &T) ;
while (T--)
{
scanf ("%d", &n) ;
sg = 0, flag = 0 ;
while (n--)
{
scanf ("%d", &num) ;
sg ^= num ;
if (num > 1) flag = 1 ;
}
if ((sg == 0 && flag == 0)||(sg && flag)) puts ("John") ;
else puts ("Brother") ;
}
return 0 ;
}



posted @ 2012-01-06 23:59  Seraph2012  阅读(112)  评论(0编辑  收藏  举报