题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1850
题意:中文题诶~
思路:nim博弈
可以将本题抽象成一般nim博弈,那么有:
1. 对于所有元素异或值为0的情况为P局面
2. 若a1^a2...^ai...^an=m!=0,那么一定存在一个ai'使得a1^a2...^ai'...^an=0;不难算出ai'=num^ai;
即只要我们能将ai变成num^ai,那么对手将面对P局面;又从游戏规则可知ai'<ai(要从ai中拿掉一定数目的牌变成ai');
所以我们需要做的就是统计num^ai<ai的数目啦;
代码:
1 #include <iostream> 2 #define MAXN 1010 3 using namespace std; 4 5 int a[MAXN]; 6 7 int main(void){ 8 int n; 9 while(cin >> n&&n){ 10 int ans=0; 11 for(int i=0; i<n; i++){ 12 cin >> a[i]; 13 ans^=a[i]; 14 } 15 if(!ans){ 16 cout << 0 << endl; 17 }else{ 18 int num=0; 19 for(int i=0; i<n; i++){ 20 if((ans^a[i])<a[i]){ 21 num++; 22 } 23 } 24 cout << num << endl; 25 } 26 } 27 return 0; 28 }