hdu1850(nim博弈)

Posted ygeloutingyu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hdu1850(nim博弈)相关的知识,希望对你有一定的参考价值。

题目链接: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 }
View Code

 

以上是关于hdu1850(nim博弈)的主要内容,如果未能解决你的问题,请参考以下文章

HDU1850 Being a Good Boy in Spring Festival(NIM)

HDU_1850_nim游戏

HDU 1850 Nim-Sum思想总结

HDU1850 Being a Good Boy in Spring Festival(NIM统计)

hdu 1730 Nim博弈

HDU1944 S-NIM(多个NIM博弈)