HDU2176题意:

m堆石子,两人轮流取.只能在1堆中取.取完者胜.先取者负输出No.先取者胜输出Yes,然后输出怎样取子.

通过 SG定理 我们可以知道每一个数的SG值,等于这个数到达不了的前面数中的最小值。本题题意和尼姆博弈一样,即可以在一堆中任意个石子,所以也就是说每个数都可以到达前面经过的每一个数,所以每一个数的SG值就是它本身。又因为有好多堆石子,所以可以看作多个一堆石子的游戏,我们可以让n代表每一堆石子的数量,那么让所有堆的SG(n)相互异或得到的结果就是答案(这里只是用SG定义来证明了一下尼姆博弈的作法)

HDU2176题解:

如果给出的每一堆石子的总数n相互异或得到0,就证明这是一个必败态

那么做这一道题先判断一个全部异或后得到的是不是0,如果是0直接输出No

不是0的话,就要找方法使得一步操作过后局面变成必败态,变成必败态要是他们所以异或起来是0,而一个数和它自己异或就是0

所以我们可以从所有石子堆中找出来一个数,让它变成除自己外剩下所有值的异或值,这样全部异或起来就是0了

比如(用^代表异或):

(1 2 5)  1^2=3 ,那么我们可以从5中拿走2个石子,这样就变成了必败态

(1 6 9)  1^6=7,那么可以从9中拿走2个石子,这样也变成了必败态

代码:

 1 #include<stdio.h>
2 #include<string.h>
3 #include<iostream>
4 #include<algorithm>
5 #include<math.h>
6 #include<stack>
7 #include<math.h>
8 using namespace std;
9 typedef long long ll;
10 const int maxn=1000005;
11 int v[maxn];
12 int main()
13 {
14 int n;
15 while(~scanf("%d",&n))
16 {
17 if(!n) break;
18 int flag=0;
19 for(int i=0;i<n;++i)
20 {
21 scanf("%d",&v[i]);
22 flag^=v[i];
23 }
24 if(!flag)
25 {
26 printf("No\n");
27 continue;
28 }
29 printf("Yes\n");
30 for(int i=0;i<n;++i)
31 {
32 if(v[i]>(flag^v[i]))
33 {
34 printf("%d %d\n",v[i],flag^v[i]);
35 }
36 }
37 }
38 return 0;
39 }

HDU1850题意:

和上一题和基本上一样,就是问你如果能赢,第一步拿石子有多少种方法

题解:

上一道题就是在判断从那一堆中拿石子,所以这一道题只需要稍微改变一下就可以了

代码:

 1 #include<stdio.h>
2 #include<string.h>
3 #include<iostream>
4 #include<algorithm>
5 #include<math.h>
6 #include<stack>
7 #include<math.h>
8 using namespace std;
9 typedef long long ll;
10 const int maxn=1000005;
11 int v[maxn];
12 int main()
13 {
14 int n;
15 while(~scanf("%d",&n))
16 {
17 if(!n) break;
18 int flag=0;
19 for(int i=0;i<n;++i)
20 {
21 scanf("%d",&v[i]);
22 flag^=v[i];
23 }
24 int ans=0;
25 for(int i=0;i<n;++i)
26 {
27 if(v[i]>(flag^v[i])) ans++;
28 }
29 printf("%d\n",ans);
30 }
31 return 0;
32 }

HDU 2176 取(m堆)石子游戏 && HDU1850 Being a Good Boy in Spring Festivaly的更多相关文章

  1. HDU 2176 取(m堆)石子游戏(Nim)

    取(m堆)石子游戏 题意: Problem Description m堆石子,两人轮流取.只能在1堆中取.取完者胜.先取者负输出No.先取者胜输出Yes,然后输出怎样取子.例如5堆 5,7,8,9,1 ...

  2. HDU 2176:取(m堆)石子游戏(Nim博弈)

    取(m堆)石子游戏 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Sub ...

  3. HDU 2176 取(m堆)石子游戏 (尼姆博奕)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2176 m堆石子,两人轮流取.只能在1堆中取.取完者胜.先取者负输出No.先取者胜输出Yes,然后输出怎 ...

  4. hdu 2176 取(m堆)石子游戏 (裸Nim)

    题意: m堆石头,每堆石头个数:a[1]....a[m]. 每次只能在一堆里取,至少取一个. 最后没石子取者负. 先取者负输出NO,先取胜胜输出YES,然后输出先取者第1次取子的所有方法.如果从有a个 ...

  5. HDU 2176 取(m堆)石子游戏 —— (Nim博弈)

    如果yes的话要输出所有情况,一开始觉得挺难,想了一下也没什么. 每堆的个数^一下,答案不是0就是先取者必胜,那么对必胜态显然至少存在一种可能性使得当前局势变成必败的.只要任意选取一堆,把这堆的数目变 ...

  6. HDU 2176 取(m堆)石子游戏 尼姆博弈

    题目思路: 对于尼姆博弈我们知道:op=a[1]^a[2]--a[n],若op==0先手必败 一个简单的数学公式:若op=a^b 那么:op^b=a: 对于第i堆a[i],op^a[i]的值代表其余各 ...

  7. HDU 2176 取(m堆)石子游戏(尼姆博奕)

    nim基础博弈 #include<stdio.h> #include<iostream> #include<cstring> #include<queue&g ...

  8. HDU 2177 取(2堆)石子游戏

    取(2堆)石子游戏 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total S ...

  9. 杭电 2176 取(m堆)石子游戏(博弈)

    取(m堆)石子游戏 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

随机推荐

  1. Hystrix-服务降级-服务熔断-服务限流

    Hystrix简介 Hystrix是一个用于处理分布式系统的延迟和容错的开源库,在分布式系统里,许多依赖不可避免的会调用失败,比如超时.异常等,Hystrix能够保证在一个依赖出问题的情况下,不会导致 ...

  2. NAS基础知识

    一.什么是NAS 1.NAS的定义 NAS(Network Attached Storage:网络附属存储)按字面简单说就是连接在网络上,具备资料存储功能的装置,因此也称为"网络存储器&qu ...

  3. 【Linux】如何查找命令及历史记录history

    如何查找命令及历史记录 文章目录 如何查找命令及历史记录 1.如何找到一个命令 2.命令的历史记录 3.一些实用的快捷键 4.小结 5.参考资料 如何找到一个命令.命令的历史记录.一些实用的快捷键.总 ...

  4. 【Java】面向对象

    重新搞一波 复习巩固 简单记录 慕课网 imooc Java 零基础入门-Java面向对象-面向对象 都是视频课件里的. 文章目录 面向对象 什么是对象 什么是面向对象 类 什么是对象的属性和方法 类 ...

  5. RandomForest 随机森林算法与模型参数的调优

    公号:码农充电站pro 主页:https://codeshellme.github.io 本篇文章来介绍随机森林(RandomForest)算法. 1,集成算法之 bagging 算法 在前边的文章& ...

  6. P1220 关路灯(区间规划)

    题目描述 某一村庄在一条路线上安装了n盏路灯,每盏灯的功率有大有小(即同一段时间内消耗的电量有多有少).老张就住在这条路中间某一路灯旁,他有一项工作就是每天早上天亮时一盏一盏地关掉这些路灯. 为了给村 ...

  7. Vue MVVM模型原理

    最近反思了下自己,觉得自己很急躁,学技术总是觉得能用就行了,其实这样很不好,总是这样,就永远只能当用轮子的人.好了,废话不多说,转入正题: 要理解MVVM的原理,首先要理解它是什么,怎么运作起来的: ...

  8. jQ实现图片无缝轮播

    在铺页面的过程中,总是会遇到轮播图需要处理,一般我是会用swiper来制作,但总会有哪个几个个例需要我自己来写功能,这里制作了一个jq用来实现图片无缝轮播的dome,分享给大家ヽ( ̄▽ ̄)ノ. dom ...

  9. JSAAS BPM快速开发平台-企业管理软件,专属你的企业管家

    前言: 2020年,企业该如何去选择合适的信息化规划管理软件,基于目前社会软件杂乱无章,选择企业业务贴近的管理软件,甚是困难,市场上一些大品牌公司的产品,定位高,价格高,扩展难,等等一系列的问题,对于 ...

  10. Linux中LPC、RPC、IPC的区别

    其实这玩意儿就是纸老虎,将英文缩写翻译为中文就明白一半了. IPC:(Inter Process Communication )跨进程通信 这个概念泛指进程之间任何形式的通信行为,是个可以拿来到处套的 ...