Being a good boy in the spring festival NIM博弈
一年在外 父母时刻牵挂
春节回家 你能做几天好孩子吗
寒假里尝试做做下面的事情吧
陪妈妈逛一次菜场
悄悄给爸爸买个小礼物
主动地 强烈地 要求洗一次碗
某一天早起 给爸妈用心地做回早餐
如果愿意 你还可以和爸妈说
咱们玩个小游戏吧 ACM课上学的呢~
下面是一个二人小游戏:桌子上有M堆扑克牌;每堆牌的数量分别为Ni(i=1…M);两人轮流进行;每走一步可以任意选择一堆并取走其中的任意张牌;桌子上的扑克全部取光,则游戏结束;最后一次取牌的人为胜者。
现在我们不想研究到底先手为胜还是为负,我只想问大家:
——“先手的人如果想赢,第一步有几种选择呢?”
Input
输入数据包含多个测试用例,每个测试用例占2行,首先一行包含一个整数M(1<M<=100),表示扑克牌的堆数,紧接着一行包含M个整数Ni(1<=Ni<=1000000,i=1…M),分别表示M堆扑克的数量。M为0则表示输入数据的结束。
Output
如果先手的人能赢,请输出他第一步可行的方案数,否则请输出0,每个实例的输出占一行。
Sample Input
3
5 7 9
0
Sample Output
1
这是一道NIM博弈题目,确实很难想,想了很久还是觉得应该从NIM博弈的推导过程出发
对于某个必胜局面有a1 ^ a2 ^ a3 ^ …^ an=k(k!=0);
则必定存在i(1<=i<=n)使得ai^k<=ai;
现在记ai’=ai^k, 则有:
a1^ a2^ …^ ai’^ …^an
=a1^ a2^ …^ ai^ k^ …^an
=k^k=0;
那么当将ai变为ai’, 即在第i堆取走ai-ai^k个石子后,局面就变成了必败局面;
所以任一必胜态都可以一步到达必败态;
首先在输入过程中就先将每个值进行异或,如果异或值为0则直接可以知道先手是必败的,在不为0时,可知此时为必胜态,由上述推导过程可知只要满足ai^k<=ai就可以使对方处在必败态,那么需要的就只是遍历一遍数组了
AC代码
#include<stdio.h>
int main()
{int M;int num[105];while(scanf("%d",&M)&&M){int sum=0,ans=0,res=0;for(int i=0;i<M;i++){scanf("%d",&num[i]);sum=sum^num[i];}if(sum==0)printf("0\n");else{for(int i=0;i<M;i++){res=sum^num[i];if(res<num[i])ans++;}printf("%d\n",ans);}}return 0;
}
Being a good boy in the spring festival NIM博弈相关推荐
- Being a Good Boy in Spring Festival【博弈】
Being a Good Boy in Spring Festival Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32 ...
- HDU1850 Being a Good Boy in Spring Festival
1 /* 2 HDU1850 Being a Good Boy in Spring Festival 3 http://acm.hdu.edu.cn/showproblem.php?pid=1850 ...
- HDU1850 Being a Good Boy in Spring Festival【Nim博弈】
Being a Good Boy in Spring Festival Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 ...
- Spring Festival
我的个人博客 In China, Spring Festival is one of the most important festivals. It is also getting more and ...
- 春节词汇 Spring Festival Words
节日名 Greeting season 春节 The Spring Festival 农历 lunar calendar 正月 lunar January; the first month by lu ...
- hdu 1850 Being a Good Boy in Spring Festival (尼姆博弈)
Being a Good Boy in Spring Festival Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32 ...
- Spring festival return travel rush begins(春节返程高峰开始)
As the Spring Festival holiday nears its end, transportation authorities are gearing up for the trav ...
- 家乡的春节html,家乡的春节(Spring Festival in my hometown)英语作文
家乡的春节(Spring Festival in my hometown)英语作文该文细节:JOOZONE + 标题:家乡的春节(Spring Festival in my hometown)英语作文 ...
- Check task status after 2016 Spring festival
Created by Wang, Jerry on Feb 21, 2016
最新文章
- AI研究过于集中狭隘,我们是不是该反思了?
- 找出1个小时前更新的文件并进行拷贝
- Gtk-WARNING**:无法在模块路径中找到主题引擎:“pixmap”的解决
- 在ubuntu上安装,使用MQTT Mosquitto
- 经典算法笔记:无监督算法(聚类、降维)
- wxWidgets:wxPropertyGrid概述
- Scala入门到精通——第十一节 Trait进阶
- customizing download debug - extraction in ERP
- 临界表储存图的数据(思路+详解+图示)
- 获取当前鼠标的位置以及组件的位置
- python查看运行内存占用_python中使用psutil查看内存占用的情况
- Baum-WELCH和vertibe解码算法
- 怎么理解高内聚低耦合
- c语言作业的分析,C语言作业分析.doc
- java文件读取的几个操作-1
- 史上最管用的C盘深度清理秘籍
- GlobeImposter
- android wear5.0,Android Wear安卓5.0正式到来
- 电脑编程工作工资多少?
- 配置vps服务器,拨号换ip(一)