HDOJ1907 SG问题
题意:同样是给定n个堆,每个堆可任意取,但问的是谁最后拿走最后一个,是就输。
分析:有点意思,但是慢慢分析,也能找到必胜策略,当所有堆都为1是,偶数堆显然是先手必胜,奇数堆显然是先手必输,当大于1的堆有一个时,那么我们可以讨论剩下的1的堆数是奇数还是偶数,当剩下的堆是奇数时,那么,先手就可以将大于1的堆拿完,剩下奇数个1的堆显然,对手必输,先手必胜。当剩下的堆为偶数时,显然我使大于1的堆为1就可以了。所以只有1个大于1的堆时,先手肯定必胜。
下面我们讨论大于1的堆有n个时候,这时候,必须要进行状态转移,那么问题来了,转换到那个状态才能必胜?不难想到我将n个大于1的堆变成只有1个大于1的堆就是必胜局面。所以问题来了,如何判断是否先手能将局势转换只有一个大于1的堆呢,好了这就回到了经典nim堆问题,当SG为0时,说明对手拿到了最后一个,局势是必败,当SG不为0时,那么先手会拿到最后一个。
#include<iostream>
#include<string.h>
#include<sstream>
#include<set>
#include<algorithm>
#include<vector>
#include<map>
#include<queue>
#include<math.h>
using namespace std;
const int N = 100+5;int main() {int kase;cin >> kase;while (kase--) {int m,ant,ans=0,k=0;cin >> m;for (int i = 0; i < m; i++) {cin >> ant;ans = ans ^ ant;if (ant > 1)k = 1;}if (!k) {//没有大于1的堆时if (m%2==0)cout << "John\n";else cout << "Brother\n";}else {//有大于1的堆//看SG值是否为0,SG不为0,说明它可以转换只有一个堆大于1的状态//相当于普通的nim堆//谁会拿到最后一个大于1的堆!if(ans!=0)cout << "John\n";else cout << "Brother\n";}}return 0;
}
HDOJ1907 SG问题相关推荐
- Sg.js框架核心概念
Sg.js框架核心概念: 1)所有变量.方法.类对象全部都是从属于$g主树,由$g分支出很多$g.变量名.$g.方法.$g.对象id.$g.类: 2)获取控件内部属性必须使用公开的get方法获取,禁止 ...
- UVA 1482 - Playing With Stones(SG打表规律)
UVA 1482 - Playing With Stones 题目链接 题意:给定n堆石头,每次选一堆取至少一个.不超过一半的石子,最后不能取的输,问是否先手必胜 思路:数值非常大.无法直接递推sg函 ...
- Win32.Lioten.SG病毒
病毒名称:Win32.Lioten.SG 疯狂性:低 破坏性:中 普及度:中 Win32.Lioten.SG病毒描述: Win32.Lioten.SG是一种通过网络共享传播的蠕虫,还会利用Window ...
- Trie树合并 + SG函数 ---- BZOJ4730. Alice和Bob又在玩游戏(动态开点Trie 树上全局异或标记 + 合并 + 博弈论)
题目大题 题目大意: 解题思路: 首先我们对于子树u的SG函数为SG函数为SG函数为 ⨁是异或和\bigoplus是异或和⨁是异或和 SG[u]=mex{⨁w∈(w的父亲在u到v的路径上)SG[w]∣ ...
- 点分治问题 ----------- P3727 曼哈顿计划E[点分治+博弈SG函数打表找规律]
题目链接 解题思路: 1.首先对于每个操作我们实际上是一个博弈问题 对于k=1的操作就是很基础的NIM游戏就是找到一条链的异或和为0 对于k=2的操作通过达打表找规律: 如果s是奇数那么偶数的SG函数 ...
- xilinx sg dma 注意事项
先更新 CURENT_DESC 设置 DMAC.RS 最后 TAIL DESC (cyclic 模式下 为描述符必须是要的 cyclic 回环的表) SG MOD 发送已成功测通 开心 XILINX ...
- AXI SG DMA 简易驱动 版本构思 (一)
第一步: 利用mmap 在内核态和用户态形成内存映射关系,和进程间通信 shmat 的原理 一致 (节省内存,如果拷贝的话就是, double的关系) 第二步: mmap的 地址要映射到,dma 分配 ...
- BZOJ 1874: [BeiJing2009 WinterCamp]取石子游戏(SG函数)
Time Limit: 5 Sec Memory Limit: 162 MB Submit: 871 Solved: 365 [Submit][Status][Discuss] Descripti ...
- 【博弈论】【SG函数】bzoj1457 棋盘游戏
一开始就必胜的特判一下. #include<cstdio> #include<cstring> #include<set> #include<algorith ...
最新文章
- 【camera-lidar-radar】基于卡尔曼滤波和扩展卡尔曼滤波的相机、激光雷达、毫米波雷达多传感器后融合
- Linux主机下无报错安装Apache服务器
- Tomcat 6.0.32 +Spring dbcp datasource关闭Tomcat出现严重异常
- Scala基础知识笔记2
- 每天一道LeetCode-----根据先序遍历和中序遍历还原二叉树
- [电子商务网站设计] 之 My Space
- 教你玩转CSS 组合选择符
- Linux 启动顺序
- 合法整数集(51Nod-1315)
- centos重启mysql_CentOS 7下启动、关闭、重启、查看MySQL服务
- 【转载】随机游走及马尔科夫链(本体映射相关)
- 输出最长上升子序列 模型(DP)
- swift扩展_Swift扩展
- 【Python小程序】第2讲:如何将TXT文件转换成CSV文件?
- [VC]socket含义
- nodejs+vue+elementui企业考勤管理系统
- 《大数据之路:阿里巴巴大数据实践》-第1篇 数据技术篇 -第3章数据同步
- java shiro原理_Shiro的原理及Web搭建
- keil 出现 Error parsing node '#text':value 'HDSC:145' not in enumeration
- 区块链项目 - 2 工作量证明