luogu P3235 [HNOI2014]江南乐
这题又是我什么时候做的(挠头)
首先是个和SG函数有关的博弈论,SG=0则先手必败.显然一堆石子就是一个游戏,而若干堆石子的SG值就是每堆SG的异或和,所以算出每堆石子SG就能知道答案
然后怎么求SG,根据定义,一个局面SG是后继局面SG的\(mex\),我们枚举某堆石子(有x个)分成多少堆i,然后能知道有若干堆石子有\(\lfloor\frac{x}{i}\rfloor\)个,还有的有\(\lceil\frac{x}{i}\rceil\)个.然后这两种石子的堆数也可以算出来,又因为异或某个数偶数次=0,所以只要分奇偶性看是否异或就好了.
上述过程可以加记忆化优化.但是暴力枚举还是不行的,注意到\(\lfloor\frac{x}{i}\rfloor\)最多只有\(2\sqrt n\)种取值,所以可以参考数论分块的做法,对于\(\lfloor\frac{x}{i}\rfloor\)相同的一些\(i\),只要计算最小的\(i\)以及\(i+1\),因为更大的\(i\)的贡献和\(i\)与\(i+1\)中某一个是相同的
#include<bits/stdc++.h>
#define LL long long
#define db double
#define il inline
#define re register
using namespace std;
const int N=1e5+10;
il int rd()
{
int x=0,w=1;char ch=0;
while(ch<'0'||ch>'9') {if(ch=='-') w=-1;ch=getchar();}
while(ch>='0'&&ch<='9') {x=(x<<3)+(x<<1)+(ch^48);ch=getchar();}
return x*w;
}
int sg[N],mm[N];
int t,f,n;
il int sov(int o)
{
if(o<f) return 0;
if(~sg[o]) return sg[o];
sg[o]=0;
for(int i=2;i<=o;i=o/(o/i)+1)
{
int xx=0;
if((o%i)&1) xx^=sov(o/i+1);
if((i-o%i)&1) xx^=sov(o/i);
mm[xx]=o;
if(i==o) continue;
xx=0,++i;
if((o%i)&1) xx^=sov(o/i+1);
if((i-o%i)&1) xx^=sov(o/i);
mm[xx]=o,--i;
}
while(mm[sg[o]]==o) ++sg[o];
return sg[o];
}
int main()
{
t=rd(),f=rd();
memset(sg,-1,sizeof(sg));
while(t--)
{
int n=rd(),an=0;
while(n--) an^=sov(rd());
printf("%d ",an>0);
}
return 0;
}
luogu P3235 [HNOI2014]江南乐的更多相关文章
- 洛谷 P3235 [HNOI2014]江南乐 解题报告
P3235 [HNOI2014]江南乐 Description 两人进行 T 轮游戏,给定参数 F ,每轮给出 N 堆石子,先手和后手轮流选择石子数大于等于 F 的一堆,将其分成任意(大于1)堆,使得 ...
- 洛谷P3235 [HNOI2014]江南乐(Multi-SG)
题目描述 小A是一个名副其实的狂热的回合制游戏玩家.在获得了许多回合制游戏的世界级奖项之后,小A有一天突然想起了他小时候在江南玩过的一个回合制游戏. 游戏的规则是这样的,首先给定一个数F,然后游戏系统 ...
- P3235 [HNOI2014]江南乐
$ \color{#0066ff}{ 题目描述 }$ 小A是一个名副其实的狂热的回合制游戏玩家.在获得了许多回合制游戏的世界级奖项之后,小A有一天突然想起了他小时候在江南玩过的一个回合制游戏. 游戏的 ...
- bzoj 3576[Hnoi2014]江南乐 sg函数+分块预处理
3576: [Hnoi2014]江南乐 Time Limit: 30 Sec Memory Limit: 512 MBSubmit: 1929 Solved: 686[Submit][Status ...
- bzoj3576: [Hnoi2014]江南乐
Description 小A是一个名副其实的狂热的回合制游戏玩家.在获得了许多回合制游戏的世界级奖项之后,小A有一天突然想起了他小时候在江南玩过的一个回合制游戏. 游戏的规则是这样的,首先给定一 ...
- [HNOI2014]江南乐
Description 小A是一个名副其实的狂热的回合制游戏玩家.在获得了许多回合制游戏的世界级奖项之后,小A有一天突然想起了他小时候在江南玩过的一个回合制游戏. 游戏的规则是这样的,首先给定一 ...
- 【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\)堆来查看后继状态 那么, ...
随机推荐
- Docker安装及常用命令
修改机器名: [root@docker /]# hostnamectl set-hostname Docker 安装EPEL源: [root@docker /]# yum -y install epe ...
- 粉红猪小妹peppa pig中英文版209集+218本绘本+音频
1.avi格式英文版包括,第一季52集有外挂英文字幕,第二季53集外挂英文字幕,第三季52集有外挂同步英文字幕,第四季1到39集有英文字幕,40-52无字幕.另有4季音频(每集都是单独的音频文件,方便 ...
- [USACO18JAN]Sprinklers
[USACO18JAN]Sprinklers 一个矩形要符合什么条件 右上角的右上有点,左下角的左下有点 所以每列的选择高度为一个区间,小于后缀最大值大于前缀最小值(不管是作为右上角还是左下角) 然后 ...
- C# 下载文件 只利用文件的存放路径来下载
第一种方式: 最简单的就是返回一个file类型的数据即FilePathResult类型的对象 string serverPath = ConfigurationManager.AppSettings[ ...
- Flask block继承和include包含
继承(Block)的本质是代码替换,继承我认为就是把完整的html文件继承到一个不完整的html文件里. 被继承html文件: <!DOCTYPE html> <html lang= ...
- (转)source insight的使用方法逆天整理
转载自:https://www.cnblogs.com/xunbu7/p/7067427.html A. why SI: 为什么要用Source Insight呢?因为她比完整的IDE要更快啊,比一般 ...
- javascript学习笔记二
1.js的string对象 **创建 String对象 *** var str = "abc"; **方法 和 属性(文档) *** 属性 length : 字符串的长度 ***方 ...
- JVM 辣鸡回收
垃圾回收算法 标记清除法 先标记出需要回收的对象,然后一次性回收.缺点:会产生内存碎片,并且效率也不高. 标记压缩法 先标记出需要回收的对象,然后让存活对象向一端移动,移动的过程中进行回收辣鸡.避免了 ...
- 关于JAVA-JS-JSP之间传值的各种方法
https://blog.csdn.net/murex_dustyone/article/details/52945552 这篇博文写的非常好,保存下来,一起学习
- phpcms 标签含义大全
{template "content","header"} ---------- 调用根目录下phpcms\template\content\header ...