取(m堆)石子游戏

Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)

Total Submission(s): 1486    Accepted Submission(s): 865

Problem Description
m堆石子,两人轮流取.仅仅能在1堆中取.取完者胜.先取者负输出No.先取者胜输出Yes,然后输出如何取子.比如5堆 5,7,8,9,10先取者胜,先取者第1次取时能够从有8个的那一堆取走7个剩下1个,也能够从有9个的中那一堆取走9个剩下0个,也能够从有10个的中那一堆取走7个剩下3个.
 
Input
输入有多组.每组第1行是m,m<=200000. 后面m个非零正整数.m=0退出.
 
Output
先取者负输出No.先取者胜输出Yes,然后输出先取者第1次取子的全部方法.假设从有a个石子的堆中取若干个后剩下b个后会胜就输出a b.參看Sample Output.
 
Sample Input
2
45 45
3
3 6 9
5
5 7 8 9 10
0
 
Sample Output
No
Yes
9 5
Yes
8 1
9 0
10 3
 
Author
Zhousc
 
Source
 


又是一道尼姆博弈。
这根当初做 威佐夫博弈 一样,先是做个简单的推断,然后就是将非神秘态变成神秘态。
这道题也是改变成神秘态,输出将哪个数字变成哪个数字。
推断是否为尼姆博弈。可戳:http://blog.csdn.net/lttree/article/details/24874819
主要就是怎样改变:

若a1^a2^...^an!=0。一定存在某个合法的移动,

将ai改变成ai'后满足a1^a2^...^ai'^...^an=0。

若a1^a2^...^an=k,则一定存在某个ai,

它的二进制 表示在k的最高位上是1(否则k的最高位那个1是怎么得到的)。

这时ai^k<ai一定成立。

则我们能够将ai改变成ai'=ai^k,此时a1^a2^...^ai'^...^an=a1^a2^...^an^k=0。

然后,从第一个位置開始遍历找  ai>ai^k 的情况就能够了。

/**************************************
***************************************
* Author:Tree *
*From :http://blog.csdn.net/lttree *
* Title : 取(m堆)石子游戏 *
*Source: hdu 2176 *
* Hint : 尼姆博弈 *
***************************************
**************************************/
#include <stdio.h>
#include <algorithm>
using namespace std;
int arr[200001];
int main()
{
int n,i,t,temp;
while( scanf("%d",&n) && n )
{
temp=0;
for(i=0;i<n;++i)
{
scanf("%d",&arr[i]);
temp^=arr[i];
} if( temp==0 ) printf("No\n");
else
{
printf("Yes\n");
for(i=0;i<n;++i)
{
t=temp^arr[i];
if( t<arr[i] )
printf("%d %d\n",arr[i],t);
}
}
}
return 0;
}



ACM-尼姆博弈之取(m堆)石子游戏——hdu2176的更多相关文章

  1. 取(m堆)石子游戏 HDU2176(Nim博弈)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2176 题目: Problem Description m堆石子,两人轮流取.只能在1堆中取.取完者胜. ...

  2. HDU2177取(2堆)石子游戏---(威佐夫博弈)

    http://acm.hdu.edu.cn/showproblem.php?pid=2177 取(2堆)石子游戏 Time Limit: 3000/1000 MS (Java/Others)    M ...

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

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

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

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

  5. HDU-2176 取(m堆)石子游戏

    http://acm.hdu.edu.cn/showproblem.php?pid=2176 第三种博弈,但一定要注意优化时间 取(m堆)石子游戏 Time Limit: 3000/1000 MS ( ...

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

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

  7. HDUOJ-----2175取(m堆)石子游戏

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

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

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

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

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

随机推荐

  1. BZOJ.2339.[HNOI2011]卡农(思路 DP 组合 容斥)

    题目链接 \(Description\) 有\(n\)个数,用其中的某些数构成集合,求构造出\(m\)个互不相同且非空的集合(\(m\)个集合无序),并满足每个数总共出现的次数为偶数的方案数. \(S ...

  2. POJ 2778 DNA Sequence(AC自动机+矩阵)

    [题目链接] http://poj.org/problem?id=2778 [题目大意] 给出一些字符串,求不包含这些字符串的长度为n的字符串的数量 [题解] 我们将所有串插入自动机计算match,对 ...

  3. 【洛谷】4917:天守阁的地板【欧拉函数的应用】【lcm与gcd】【同除根号优化】

    P4917 天守阁的地板 题目背景 在下克上异变中,博丽灵梦为了找到异变的源头,一路打到了天守阁 异变主谋鬼人正邪为了迎击,将天守阁反复颠倒过来,而年久失修的天守阁也因此掉下了很多块地板 异变结束后, ...

  4. bzoj 3668 数位DP

    收获: 1.如果有很多位操作,并且不包含+-×/等高级运算,那么可以一位一位考虑,如果求一个最优解,可以尝试逐位确定,这道题因为原始攻击值有范围,那么就需要数位DP. /*************** ...

  5. Codeforces Round #281 (Div. 2) D. Vasya and Chess 镜面对称 博弈论

    D. Vasya and Chess time limit per test 2 seconds memory limit per test 256 megabytes input standard ...

  6. hierarchyid有关的一些函数

    于hierarchyid有关的一些函数主要有:    GetAncestor :取得某一个级别的祖先    GetDescendant :取得某一个级别的子代    GetLevel :取得级别    ...

  7. MySQL数据库基准压力测试工具之MySQLSlap使用实例

    一.Mysqlslap介绍 mysqlslap是MySQL5.1之后自带的benchmark基准测试工具,类似Apache Bench负载产生工具,生成schema,装载数据,执行benckmark和 ...

  8. 通过maven-war-plugin插件对war包分环境打包

    针对多环节,从源头打包入手,当然这些都可以在运维阶段用脚本进行替换来代替 resources/environment/下有四个环境,local本地.dev开发.test测试.pre预上线.prod生产 ...

  9. ORA-00918:未明确定义列

    <script type="text/javascript"><!-- google_ad_client = "pub-9528830580198364 ...

  10. VS2010下配置Winpcap 开发环境

    http://blog.csdn.net/taotaoyouarebaby/article/details/27326829