[恢]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 ;
}