【HDU 2176】 取(m堆)石子游戏
2024-08-31 09:05:46
【题目链接】
http://acm.hdu.edu.cn/showproblem.php?pid=2176
【算法】
Nim博弈
当石子数异或和不为0时,先手必胜,否则先手必败
设石子异或和为S
如果S xor ai <= ai,那么,第一步就可以从第i堆石子中取走(S xor ai)个石子
【代码】
#include<bits/stdc++.h>
using namespace std;
#define MAXM 200010 int i,m,k,sum;
int a[MAXM]; int main()
{ while (scanf("%d",&m) && m)
{
sum = ;
for (i = ; i <= m; i++)
{
scanf("%d",&a[i]);
sum ^= a[i];
}
if (sum != )
{
printf("Yes\n");
for (i = ; i >= ; i--)
{
if (sum & ( << i))
{
k = i;
break;
}
}
for (i = ; i <= m; i++)
{
if ((sum ^ a[i]) <= a[i])
printf("%d %d\n",a[i],sum^a[i]);
}
} else printf("No\n");
} return ; }
最新文章
- Linux创建定时任务
- 【编程题目】在从 1 到 n 的正数中 1 出现的次数
- Git 提交后开始自动构建
- Ye.云狐J2刷机笔记 | 完美切换内部存储卡和SD卡的改法.vold.fstab
- flex-linkbutton
- vi/vim编辑器的基本操作
- HDU1005 找规律 or 循环点 or 矩阵快速幂
- [转] 学会fetch的用法
- C# MVC+EF—页面搭建
- java提供类与cglib包实现动态代理
- django 项目中使用多数据库 multiple databases
- bzoj1050 旅行
- Redis安装异常解决办法
- Django+python实现网页数据的excel导出
- 一个例子说明substr(), mb_substr() 和 mb_strcut()之间的区别
- LeetCode 二叉树的层次遍历 C++
- Centos7 docker容器 搭建
- HDU 4655 Cut Pieces 找规律+简单计数
- Hive命令行经常使用操作(数据库操作,表操作)
- Jquery根据name取得所有选中的Checkbox值
热门文章
- VUE 基础语法
- C# How to convert MessageBodyStream to MemoryStream?
- javascript中caller和callee call和apply
- JavaWeb详细学习路线图
- class A<;T>; where T:new()相关知识点
- wp8路线跟踪应用源码详细说明
- 使用Caffe预测遇到的问题
- Ubuntu14.04引导菜单修复
- ubuntu 搭建Mercurial 服务(nginx)
- RabbitMQ学习之spring配置文件rabbit标签的使用