【HNOI2014】江南乐
题面
题解
知识引入 - \(SG\)函数
任何一个公平组合游戏都可以通过把每个局面看成一个顶点,对每个局面和它的子局面连一条有向边来抽象成这个“有向图游戏”。下面我们就在有向无环图的顶点上定义Sprague-Grundy函数。
定义\(mex\)运算,表示最小的不属于这个集合的非负整数
如:\(mex(\{0,1,2,4\})=3,mex(\{1,3,5\})=0,mex(\{\})=0\)。
对于一个给定的有向无环图,定义关于图的每个顶点的Sprague-Grundy函数\(g\)如下:
\]
由\(g(x)\)的性质可以得出:\(g(x) = 0 \Leftrightarrow x \in\)必败态
如果一个游戏可以分成多个子游戏,那么整个游戏的\(SG\)值就是每个子游戏的\(SG\)值的异或和。
本题题解
部分分可以暴力求\(g(x)\)。
枚举分成的堆数。如果将\(x\)分成了\(i\)堆,那么这\(i\)堆中有\(x \% i\)堆\(\left\lceil\frac{x}{i}\right\rceil\),有\(i - x \% i\)堆\(\left\lfloor\frac{x}{i}\right\rfloor\)。
对于每一个\(i\),算出它的\(SG\)值,为所有分出来的\(SG\)值的异或和的\(mex\)
然后\(SG\)函数可以记忆化。
接下来继续推性质,因为\(x \oplus x = 0\),所以只需要根据奇偶性讨论一下就可以了,这时候大约有\(70\)分。
然后\(\left\lfloor\frac{x}{i}\right\rfloor\)可以数论分块,于是数论分块即可。
代码
#include<cstdio>
#include<cstring>
#include<cctype>
#include<algorithm>
#define RG register
inline int read()
{
int data = 0, w = 1; char ch = getchar();
while(ch != '-' && (!isdigit(ch))) ch = getchar();
if(ch == '-') w = -1, ch = getchar();
while(isdigit(ch)) data = data * 10 + (ch ^ 48), ch = getchar();
return data * w;
}
const int maxn(100010);
int sg[maxn], vis[maxn], T, F;
int SG(int x)
{
if(x < F) return 0;
if(~sg[x]) return sg[x];
for(RG int l = 2, r; l <= x; l = r + 1)
{
r = (x / (x / l));
for(RG int j = l; j <= std::min(l + 1, r); j++)
{
int a = x % j, b = x / j, c = j - x % j, s = 0;
if(a & 1) s ^= SG(b + 1);
if(c & 1) s ^= SG(b);
vis[s] = x;
}
}
for(RG int i = 0; ; i++) if(vis[i] != x) return sg[x] = i;
}
int main()
{
memset(sg, -1, sizeof sg);
T = read(), F = read();
while(T--)
{
int n = read(), ans = 0;
for(RG int i = 1; i <= n; i++) ans ^= SG(read());
printf("%d ", (bool)ans);
}
return 0;
}
【HNOI2014】江南乐的更多相关文章
- bzoj 3576[Hnoi2014]江南乐 sg函数+分块预处理
3576: [Hnoi2014]江南乐 Time Limit: 30 Sec Memory Limit: 512 MBSubmit: 1929 Solved: 686[Submit][Status ...
- 洛谷 P3235 [HNOI2014]江南乐 解题报告
P3235 [HNOI2014]江南乐 Description 两人进行 T 轮游戏,给定参数 F ,每轮给出 N 堆石子,先手和后手轮流选择石子数大于等于 F 的一堆,将其分成任意(大于1)堆,使得 ...
- bzoj3576: [Hnoi2014]江南乐
Description 小A是一个名副其实的狂热的回合制游戏玩家.在获得了许多回合制游戏的世界级奖项之后,小A有一天突然想起了他小时候在江南玩过的一个回合制游戏. 游戏的规则是这样的,首先给定一 ...
- [HNOI2014]江南乐
Description 小A是一个名副其实的狂热的回合制游戏玩家.在获得了许多回合制游戏的世界级奖项之后,小A有一天突然想起了他小时候在江南玩过的一个回合制游戏. 游戏的规则是这样的,首先给定一 ...
- 洛谷P3235 [HNOI2014]江南乐(Multi-SG)
题目描述 小A是一个名副其实的狂热的回合制游戏玩家.在获得了许多回合制游戏的世界级奖项之后,小A有一天突然想起了他小时候在江南玩过的一个回合制游戏. 游戏的规则是这样的,首先给定一个数F,然后游戏系统 ...
- luogu P3235 [HNOI2014]江南乐
传送门 这题又是我什么时候做的(挠头) 首先是个和SG函数有关的博弈论,SG=0则先手必败.显然一堆石子就是一个游戏,而若干堆石子的SG值就是每堆SG的异或和,所以算出每堆石子SG就能知道答案 然后怎 ...
- 【BZOJ】3576: [Hnoi2014]江南乐
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=3576 很显然,这是一个multi-nim游戏. 注意:1.一个点的SG值就是一个不等于它的 ...
- 【bzoj3576】 Hnoi2014—江南乐
http://www.lydsy.com/JudgeOnline/problem.php?id=3576 (题目链接) 题意 给出一个数$F$,然后$n$堆石子,每次操作可以把一堆不少于$F$的石子分 ...
- luoguP3235 [HNOI2014]江南乐 数论分块 + 博弈论
感觉其实很水? 题目就是一个Multi SG游戏,只需要预处理出所有的\(sg\)值即可\(O(Tn)\)计算 对于计算\(sg[n]\)而言,显然我们可以枚举划分了\(x\)堆来查看后继状态 那么, ...
- 【LG3235】 [HNOI2014]江南乐
题目描述 给出\(n\)堆石子, 每次可以选择将大于某个数\(f\)一堆平均分成多个堆, 最后不能操作的失败. 题解 10pts 直接爆搜即可. 70pts 像我们对这类题目的常规操作那样,将一整个局 ...
随机推荐
- UITabBar设置详解
UITabBar设置详解 效果图 说明 1. 设置tabBarItem中的图片以及标题 2. 设置标题文本样式 3. 修改tabBar背景色 源码 https://github.com/YouXian ...
- Linux系统清除多余的账号
清除多余的账号 注释掉/etc/passwd文件中nologin的行 grep 'nologin' /etc/passwd 注: 目前暂没想到用命令行替换,后面再想想
- 禁用休眠(删除休眠文件) 关掉此选项可节省C盘好几G空间:文章内容bat文件源码
@ECHO offTITLE 关掉休眠 MACHENIKE set TempFile_Name=%SystemRoot%\System32\BatTestUACin_SysRt%Random%.bat ...
- 解决 hibernate cannot define positional parameter after any named parameters have been defined
解决 hibernate cannot define positional parameter after any named parameters have been defined 把模糊查询的 ...
- Hadoop HBase概念学习系列之概念视图(又名为逻辑模型)(八)
其实啊,我们把HBase想象成一个大的映射关系,再者,本来,HBase存储的数据可以理解为一种key和value的映射关系,但有不是简简单单的映射关系那种,因为比如有各个时间戳版本啊. 通过行键.行键 ...
- APUE8进程控制 fork vfork exec
- 导出类成员里含有stl对象
How to export an instantiation of a Standard Template Library (STL) class and a class that contains ...
- 1015. [JSOI2008]星球大战【并查集】
Description 很久以前,在一个遥远的星系,一个黑暗的帝国靠着它的超级武器统治者整个星系.某一天,凭着一个偶然的 机遇,一支反抗军摧毁了帝国的超级武器,并攻下了星系中几乎所有的星球.这些星球通 ...
- 1875: [SDOI2009]HH去散步
Time Limit: 20 Sec Memory Limit: 64 MB Submit: 2333 Solved: 1204 [Submit][Status][Discuss] Descripti ...
- 【转】Android业务组件化之URL Scheme使用
前言: 最近公司业务发展迅速,单一的项目工程不再适合公司发展需要,所以开始推进公司APP业务组件化,很荣幸自己能够牵头做这件事,经过研究实现组件化的通信方案通过URL Scheme,所以想着现在还是在 ...