【bzoj3567】江南乐】的更多相关文章

fye测试原题,高一全跪,高二学长除了CA爷似乎都A辣(逃) 3576: [Hnoi2014]江南乐 Time Limit: 30 Sec Memory Limit: 512 MB Submit: 1099 Solved: 408 [Submit][Status][Discuss] Description 小A是一个名副其实的狂热的回合制游戏玩家.在获得了许多回合制游戏的世界级奖项之后,小A有一天突然想起了他小时候在江南玩过的一个回合制游戏. 游戏的规则是这样的,首先给定一个数F,然后游戏系统会…
3576: [Hnoi2014]江南乐 Time Limit: 30 Sec  Memory Limit: 512 MBSubmit: 1929  Solved: 686[Submit][Status][Discuss] Description 小A是一个名副其实的狂热的回合制游戏玩家.在获得了许多回合制游戏的世界级奖项之后,小A有一天突然想起了他小时候在江南玩过的一个回合制游戏. 游戏的规则是这样的,首先给定一个数F,然后游戏系统会产生T组游戏.每一组游戏包含N堆石子,小A和他的对手轮流操作.…
[BZOJ3576]江南乐(博弈论) 题面 BZOJ 洛谷 题解 无论一堆石头怎么拆分,都并不能改变它是一个\(Multi-SG\)的事实. 既然每一组的\(F\)都是固定的,那么我们预处理所有的可能的堆,而将石子拆分成若干堆,也只需要考虑\(SG\)函数的值就好了. 但是这样子求\(SG\)值的复杂度是\(O(V^2)\)的,其中\(V\)是值域,也就是\(10^5\). 再分析一下,将\(x\)个式子拆分成的最少的石子个数是\([x/m]\),最多的情况是\([x/m+1]\), 因为\([…
P3235 [HNOI2014]江南乐 Description 两人进行 T 轮游戏,给定参数 F ,每轮给出 N 堆石子,先手和后手轮流选择石子数大于等于 F 的一堆,将其分成任意(大于1)堆,使得这些堆中石子数最多的和最少的相差不超过1(即尽量均分).求先手和后手谁必胜. Input 输入第一行包含两个正整数T和F,分别表示游戏组数与给定的数. 接下来T行,每行第一个数N表示该组游戏初始状态下有多少堆石子.之后N个正整数,表示这N堆石子分别有多少个. Output 输出一行,包含T个用空格隔…
LOJ#2210. 「HNOI2014」江南乐 感觉是要推sg函数 发现\(\lfloor \frac{N}{i}\rfloor\)只有\(O(\sqrt{N})\)种取值 考虑把这些取值都拿出来,能取到这个值的\(i\)是一个区间\([l,r]\) 如果\(r - l + 1 = 1\),那么直接算这个数的答案即可(\(\lfloor \frac{N}{i}\rfloor\)的石子有奇数堆还是偶数堆,\(\lfloor \frac{N}{i}\rfloor + 1\)的石子有奇数堆还是偶数堆,…
Portal -->bzoj3567 Solution ​  今天开始啃博弈论了qwq ​  先mark一篇很棒的博客Portal -->博弈论学习资料 ​​  稍微总结一下两个自己容易混淆的点: 1.有一类博弈论问题的主要步骤是首先将原游戏拆分成若干个独立的子游戏,然后原游戏的\(sg\)就是子游戏\(sg\)值的异或和 2.有向图游戏中,对于一个局面,它的\(sg\)是其后继局面的\(sg\)值的\(mex\) ​   ​​  这题的话,首先想怎么拆分 ​​  不难发现每一堆的操作其实是独…
Description 小A是一个名副其实的狂热的回合制游戏玩家.在获得了许多回合制游戏的世界级奖项之后,小A有一天突然想起了他小时候在江南玩过的一个回合制游戏.    游戏的规则是这样的,首先给定一个数F,然后游戏系统会产生T组游戏.每一组游戏包含N堆石子,小A和他的对手轮流操作.每次操作时,操作者先选定一个不小于2的正整数M (M是操作者自行选定的,而且每次操作时可不一样),然后将任意一堆数量不小于F的石子分成M堆,并且满足这M堆石子中石子数最多的一堆至多比石子数最少的一堆多1(即分的尽量平…
http://www.lydsy.com/JudgeOnline/problem.php?id=3576 思路:由于数字巨大,因此N^2异或做法是过不了的,我们考虑将n个石子分成i堆,那么会有n%i堆n/i+1的石子,i-n%i堆n/i的石子.如果两个堆的石子数相同,那么他们异或起来就为0,因此,这两种石子堆,我们可以看做:每种至多只有1堆.这样就可以枚举n/i,然后可以避免计算很多重复的部分,时间复杂度为N^1.5 #include<algorithm> #include<cstdio…
Description 题库链接 给你指定一个数 \(f\) ,并给你 \(T\) 组游戏,每组有 \(n\) 堆石子, \(A,B\) 两人轮流对石子进行操作,每次你可以选择其中任意一堆数量不小于 \(f\) 的石子,平均分为 \(m\) 份(即保证最大的一堆和最小的一堆中石子数量之差不超过 \(1\) ).不能操作者负. 问先手是否有必胜策略. \(T<100,N<100,F<100000,每堆石子数量<100000\) Solution 首先对于组合游戏,该游戏的 \(sg\…
Description 小A是一个名副其实的狂热的回合制游戏玩家.在获得了许多回合制游戏的世界级奖项之后,小A有一天突然想起了他小时候在江南玩过的一个回合制游戏.    游戏的规则是这样的,首先给定一个数F,然后游戏系统会产生T组游戏.每一组游戏包含N堆石子,小A和他的对手轮流操作.每次操作时,操作者先选定一个不小于2的正整数M (M是操作者自行选定的,而且每次操作时可不一样),然后将任意一堆数量不小于F的石子分成M堆,并且满足这M堆石子中石子数最多的一堆至多比石子数最少的一堆多1(即分的尽量平…
题目描述 小A是一个名副其实的狂热的回合制游戏玩家.在获得了许多回合制游戏的世界级奖项之后,小A有一天突然想起了他小时候在江南玩过的一个回合制游戏. 游戏的规则是这样的,首先给定一个数F,然后游戏系统会产生T组游戏.每一组游戏包含N堆石子,小A和他的对手轮流操作.每次操作时,操作者先选定一个不小于2的正整数M (M是操作者自行选定的,而且每次操作时可不一样),然后将任意一堆数量不小于F的石子分成M堆,并且满足这M堆石子中石子数最多的一堆至多比石子数最少的一堆多1(即分的尽量平均,事实上按照这样的…
传送门 这题又是我什么时候做的(挠头) 首先是个和SG函数有关的博弈论,SG=0则先手必败.显然一堆石子就是一个游戏,而若干堆石子的SG值就是每堆SG的异或和,所以算出每堆石子SG就能知道答案 然后怎么求SG,根据定义,一个局面SG是后继局面SG的\(mex\),我们枚举某堆石子(有x个)分成多少堆i,然后能知道有若干堆石子有\(\lfloor\frac{x}{i}\rfloor\)个,还有的有\(\lceil\frac{x}{i}\rceil\)个.然后这两种石子的堆数也可以算出来,又因为异或…
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=3576 很显然,这是一个multi-nim游戏. 注意:1.一个点的SG值就是一个不等于它的后继点的SG的且大于等于零的最小整数.(mex) 2.主游戏的SG值等于所有子游戏的异或和 所以区分好主游戏和后继点的区别.   一开始多个石子堆组合起来形成了一个主游戏. 一个石子堆可以分为多个石子堆,每一种分发构成了一个主游戏,这些主游戏的异或和构成的当前这个点(状态)的SG函数.  显然有一个…
http://www.lydsy.com/JudgeOnline/problem.php?id=3576 (题目链接) 题意 给出一个数$F$,然后$n$堆石子,每次操作可以把一堆不少于$F$的石子分成$m$堆,$m$是玩家任选的不少于$2$的正整数,这$m$堆石子中最多的一堆与最少的一堆之差不超过$1$,问是否存在先手必胜. Solution 对每一个子游戏考虑如何求解$SG$函数. 假设当前一堆中有$i$石子,我们想把它分成$j$堆,那么石子数为$k=\lfloor{i/j}\rfloor+…
题面 题解 知识引入 - \(SG\)函数 任何一个公平组合游戏都可以通过把每个局面看成一个顶点,对每个局面和它的子局面连一条有向边来抽象成这个"有向图游戏".下面我们就在有向无环图的顶点上定义Sprague-Grundy函数. 定义\(mex\)运算,表示最小的不属于这个集合的非负整数 如:\(mex(\{0,1,2,4\})=3,mex(\{1,3,5\})=0,mex(\{\})=0\). 对于一个给定的有向无环图,定义关于图的每个顶点的Sprague-Grundy函数\(g\)…
感觉其实很水? 题目就是一个Multi SG游戏,只需要预处理出所有的\(sg\)值即可\(O(Tn)\)计算 对于计算\(sg[n]\)而言,显然我们可以枚举划分了\(x\)堆来查看后继状态 那么,有\(n\;mod\;x\)个\(\left \lfloor \frac{n}{x} \right \rfloor + 1\)的堆以及\(x - n\;mod\;x\)个\(\left \lfloor \frac{n}{x} \right \rfloor\)的堆 暴力转移就是\(O(10^{10})…
题目描述 给出\(n\)堆石子, 每次可以选择将大于某个数\(f\)一堆平均分成多个堆, 最后不能操作的失败. 题解 10pts 直接爆搜即可. 70pts 像我们对这类题目的常规操作那样,将一整个局面分为几个子游戏,然后异或起来求答案. 注意到我们现将一堆\(m\)分为\(i\)堆,那么会分成\(\lfloor \frac mi\rfloor * i\)堆大小为\(\lfloor \frac mi\rfloor\)的,\(m - \lfloor \frac mi\rfloor * i\)堆大小…
题目描述 两人进行 $T$ 轮游戏,给定参数 $F$ ,每轮给出 $N$ 堆石子,先手和后手轮流选择石子数大于等于 $F$ 的一堆,将其分成任意(大于1)堆,使得这些堆中石子数最多的和最少的相差不超过1(即尽量均分).求先手和后手谁必胜. 输入 输入第一行包含两个正整数T和F,分别表示游戏组数与给定的数.接下来T行,每行第一个数N表示该组游戏初始状态下有多少堆石子.之后N个正整数,表示这N堆石子分别有多少个. 输出 输出一行,包含T个用空格隔开的0或1的数,其中0代表此时小A(后手)会胜利,而1…
题面 题面 题解 首先我们知道一个关于除法的重要性质:对于一个固定的\(i\),表达式\(\frac{i}{m}\)的取值只有根号个. 因此我们考虑如何优化SG函数的求解. 观察到在取值相同的同一段中,分完之后只会有m堆取值为x 或者x + 1的石子. 因此我们不需要知道每种取值的石子具体有多少,我们只需要知道它们的堆数是奇是偶即可. 同时我们知道,在同一段中,如果m变化1,那么会产生的结果就是有x堆取值为x + 1的石堆变为取值为x,并且新增一堆取值为x的石堆. 我们稍作分析: 如果x是奇数.…
\(Description\) \(n\)堆石子,每堆石子有\(s_i\)个,两个人轮流操作,每次可以将一对不少于\(F\)的石子尽量平均分成\(m\)堆,\(m\)每次自选,不能操作者输.共有\(T\)组数据 \(Solution\) \(70\ pts\) 直接\(SG\)搞一搞就好了,枚举堆的个数,异或一下就没了 \(Code\) #include<bits/stdc++.h> #define int long long using namespace std; typedef long…
挺好的题 我们算出每个数的sg值后异或起来即可 对于$n$,我们要求$sg_n$ 朴素的想法是枚举把$n$个石子分成$m$堆,有$m-n\%m$堆大小为$\left\lfloor\frac nm\right\rfloor$的石子,有$n\%m$堆大小为$\left\lfloor\frac nm\right\rfloor+1$的石子,因为是异或所以只有奇数堆的石子对$sg_n$有贡献,直接算出来再求mex即可 考虑优化,暴力是枚举$2\leq m\leq n$,因为当$\left\lfloor\f…
Description 小A是一个名副其实的狂热的回合制游戏玩家.在获得了许多回合制游戏的世界级奖项之后,小A有一天突然想起了他小时候在江南玩过的一个回合制游戏. 游戏的规则是这样的,首先给定一个数F,然后游戏系统会产生T组游戏.每一组游戏包含N堆石子,小A和他的对手轮流操作.每次操作时,操作者先选定一个不小于2的正整数M (M是操作者自行选定的,而且每次操作时可不一样),然后将任意一堆数量不小于F的石子分成M堆,并且满足这M堆石子中石子数最多的一堆至多比石子数最少的一堆多1(即分的尽量平均,事…
$ \color{#0066ff}{ 题目描述 }$ 小A是一个名副其实的狂热的回合制游戏玩家.在获得了许多回合制游戏的世界级奖项之后,小A有一天突然想起了他小时候在江南玩过的一个回合制游戏. 游戏的规则是这样的,首先给定一个数F,然后游戏系统会产生T组游戏.每一组游戏包含N堆石子,小A和他的对手轮流操作.每次操作时,操作者先选定一个不小于2的正整数M (M是操作者自行选定的,而且每次操作时可不一样),然后将任意一堆数量不小于F的石子分成M堆,并且满足这M堆石子中石子数最多的一堆至多比石子数最少…
Description 小A是一个名副其实的狂热的回合制游戏玩家.在获得了许多回合制游戏的世界级奖项之后,小A有一天突然想起了他小时候在江南玩过的一个回合制游戏. 游戏的规则是这样的,首先给定一个数F,然后游戏系统会产生T组游戏.每一组游戏包含N堆石子,小A和他的对手轮流操作.每次操作时,操作者先选定一个不小于2的正整数M (M是操作者自行选定的,而且每次操作时可不一样),然后将任意一堆数量不小于F的石子分成M堆,并且满足这M堆石子中石子数最多的一堆至多比石子数最少的一堆多1(即分的尽量平均,事…
Description 小A是一个名副其实的狂热的回合制游戏玩家.在获得了许多回合制游戏的世界级奖项之后,小A有一天突然想起了他小时候在江南玩过的一个回合制游戏.    游戏的规则是这样的,首先给定一个数F,然后游戏系统会产生T组游戏.每一组游戏包含N堆石子,小A和他的对手轮流操作.每次操作时,操作者先选定一个不小于2的正整数M (M是操作者自行选定的,而且每次操作时可不一样),然后将任意一堆数量不小于F的石子分成M堆,并且满足这M堆石子中石子数最多的一堆至多比石子数最少的一堆多1(即分的尽量平…
这个东西卡常--预处理的时候要先把i%j,i/j都用变量表示,还要把%2变成&1-- 首先每一堆都是不相关子游戏,所以对于每一堆求sg即可 考虑暴力枚举石子数i,分割块数j,分解成子问题求xor和(其实就是根据i/j,i/j+1的个数的奇偶性xor一下即可),然后对sg[i]暴力mex,这样是n^2的 考虑优化,注意到一共只有根号级别的i/j,所以根据这个分块,上面的xor和是跟距个数奇偶性,而同样i/j的奇偶性只有两种(因为总个数相同),也就是i%j和i%(j+2),j-(i%j)和(j+2)…
题意 有nnn堆石子,给定FFF,每次操作可以把一堆石子数不小于FFF的石子平均分配成若干堆(堆数>1>1>1). 平均分配即指分出来的石子数中最大值减最小值不超过111.不能进行操作就算输.询问先手是否有必胜策略. 分析 因为每一推石子实际上是独立的.于是就可以求出每一堆石子的SGSGSG函数后再异或起来. 于是看看怎么求SG(N)SG(N)SG(N).方法是枚举分成的堆数iii.因为最大−-−最小<=1<=1<=1,那么只可能有两种取值.设: 分出来的较小值为rrr…
正题 题目链接:https://www.luogu.com.cn/problem/P3235 题目大意 \(T\)组游戏,固定给出\(F\).每组游戏有\(n\)个石头,每次操作的人可以选择一个数量不少于\(F\)的石堆并把它尽量均摊成\(M\)堆\((M>1)\).无法操作的人输,求每组游戏是否先手必胜. 解题思路 每个石头之间互不影响,所以求出它们的\(SG\)函数然后异或起来就好了. 设\(sg_i\)表示\(i\)个石头的\(SG\)函数,然后暴力的想法是枚举\(M\)然后求答案,但是这…
HNOI2014 世界树(虚树.倍增) \(\sum M \leq 3 \times 10^5\)虚树没得跑 对于所有重要点和它们的\(LCA\)建立虚树,然后计算出每一个虚树上的点被哪个重要点控制.注意这里不仅要从父亲向儿子DFS一次,还要从儿子向父亲DFS一次,因为有可能某些重要点向上控制一些点. 对于虚树上一个点\(i\)的没有重要点在其中的子树,子树中的所有点一定归控制这个点的重要点控制,这些子树的点数和是\(size_i - \sum size_j\),其中\(j\)是\(i\)的儿子…
HNOI2012 题解 [HNOI2012]永无乡 Tag:线段树合并.启发式合并 联通块合并问题. 属于\(easy\)题,直接线段树合并 或 启发式合并即可. [HNOI2012]排队 Tag:组合数学.高精度 因为男生没有限制,首先把男生排成一列. 然后分情况讨论: 两个老师之间有男生: 首先把两个老师插入到\(n\)个男生中,方案数\(\binom{n+1}{2}\) . 然后把女生插入到老师与男生中,方案数\(\binom{n+3}{m}\). 两个老师之间无男生: 那么两个老师之间只…