[恢]hdu 1850

2011-12-23 05:06:19

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

题意:中文。

mark:上一题(1847)是博弈,搜过了,这题还是博弈,迫不得已看了一下NIM博弈。

假设数量是a1,a2,a3...an。令k = a1^a2^a3..^an。其中"^"表示异或。令ai' = ai ^ k。若ai' < ai,则表示ai这堆取成ai'可以让对方必败,即为先手的一种可行走法。

代码:

# include <stdio.h>


int a[110] ;

int main ()
{
int i, n, k, ans ;
while (~scanf ("%d", &n) && n)
{
k = 0 ;
for (i = 0 ; i < n ; i++)
{
scanf ("%d", &a[i]) ;
k ^= a[i] ;
}
ans = 0 ;
for (i = 0 ; i < n ; i++)
if ((a[i] ^ k) < a[i]) ans++ ;
printf ("%d\n", ans) ;
}
return 0 ;
}



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