2023-6-26 #61 这样的我终究 会到达怎样的对岸 又会停滞吗
——46_P 她追逐着月光的尽头
414 P8923 『MdOI R5』Many Minimizations
与 AGC049E Increment Decrement 很像的一道题,循序渐进,没有思维天堑,但难度也不低。
原问题是经典的 slope trick(CF713C Sonya and Problem Wihtout a Legend),我们的解决方法是:列出 dp 转移——加 \(|x-a_i|\),作前缀 \(\min\)。使用堆维护操作,容易发现其等价于:push 两个 \(a_i\),权值加上最大值减 \(a_i\),pop 最大值。
经过一些计算,问题可以变成求最后堆内所有数的和,枚举一个 \(t\) 统计最后对内 \(\geqslant t\) 的数数量和,此时容易得到一个类似格路行走的 \(O(nm)\) dp,而答案关于 \(x\) 显然是多项式,于是我们能做到 \(O(n^3)\)。
对 \(0\) 取 \(\max\) 有一个经典的刻画方式:找到 \(y\) 坐标最小的点,将格路整体向上平移使得该点 \(y\) 恰好为 \(0\),因此路径的限制变成:从 \(x=0\) 的任意位置开始,不能越过 \(y=0\),碰触 \(y=0\) 至少一次,最后的贡献是最终位置的 \(y\) 坐标。
碰触 \(y=0\) 至少一次的限制可以容斥掉 \(y\geqslant 1\) 的情况,使用折线法,假设终点为 \((n,i)\),使用了 \(j\) 次右下步,方案数为:
因此容易求出答案关于 \(t\) 的多项式,后面的计算就很简单了,复杂度 \(O(n^2)\)。
415 牛客多校2022 Round10 C Magic Ritual
挺好的题。
一个经典的性质是树上两个连通块的交仍是连通块,因此每种选择方案在每个时刻都是连通块。
因此对于任意时刻,树可以划分成若干个连通块(注意划分的是边不是点),每个连通块对应唯一的选择序列,且从前一个时刻到后一个时刻,只会发生连通块的分裂时间。
按照时刻从前往后 dp,记录保留下来了某个连通块,\(O(点数)\) 进行转移即可,复杂度 \(O(nm)\)。
416 P5564 [Celeste-B]Say Goodbye
树的计数显然是卡特兰数(由于加上根要乘上 \(x\)),其 OGF 记作 \(T(x)\)。
枚举环长后,burnside 一下,显然只要枚举一个约数,于是列出式子:
有一种暴力推式子最后多项式 ln 的方法,这里不提。
根据 367 Yuhao Du Contest 11 M Minimum Element Problem 的经验,卡特兰数 \(k\) 次幂的公式为:
上一篇博客说了组合意义的反射容斥推法,这里记录一下拉反推法:
由于 \(C(x)=1+xC^2(x)\) 有常数项,我们记 \(B(x)=C(x)-1\),此时 \(B(x)=x(B(x)+1)^2\),故其复合逆 \(A(x)=\frac{x}{(x+1)^2}\),所求即 \([x^n](D\circ B)(x)\),其中 \(D(x)=(x+1)^k\)。
扩展拉格朗日反演:
容易提取系数,整理一下可以得到相同的形式。
稍微推一推式子就可以得到一个 \(O((n+m)d(n))\) 的做法。
417 P5115 Check,Check,Check one two!
非 ds 做法还是比较有意思的。
注意到 lcp 拼接 lcs 后是一个基本字串结构中的代表元,我们尝试枚举代表元,那么其贡献系数为:
容易 \(O(1)\) 计算,我们只需考虑这个代表元的出现次数。
枚举 SAM 上某一结点,仅有最长串可能成为代表元,而且其左端已经极长。考虑容斥掉右端不极长的情况,只需记录每个等价类所有 endpos 下一个位置上的字符的分布,复杂度 \(O(n|\Sigma|)\)。
418 冷静一下
喵了个喵 4
如果颜色数量大于 \(n\) 一定无解,小于 \(n\) 则一定有解——我们可以考虑不断贪心地使用一操作消除,若不能使用一操作一定会出现空栈(根据抽屉原理),我们使用二操作放入空栈并继续操作,一定能进行完。
只需考虑颜色数为 \(n\),尝试类似上面的策略,容易证明按任意顺序优先进行一操作一定不劣。
我们令一个颜色最大的值为 A,次大的值为 K(若存在)。
对于一次合法的消除过程,考察最后一次二操作,此时一定是移动一个 A 到空栈,且其余 A 都在其余栈的栈底(根据上面的贪心策略显然)。对于大小为一的栈,这些颜色可以忽略(一出现就可以消除)。
可以证明此时其余非栈底元素都是 K,具体证明需要比较复杂的讨论,可以看官方题解。
此时胜利的条件即为:存在一个序列 \(s_{1,\cdots,k}\),使得 \(s_1\) 栈底元素是该颜色唯一元素,\(s_k\) 栈中有两个 A,且所有 \(s_i\) 栈底都是 A,所有 \(i<k\) 的非栈底都有 \(s_{i+1}\) 的 K。
充要性不难证明,注意到在原始栈序列这些位置的元素不会有区别,因此在原始栈序列中进行 A 与 K 之间的连边,并以所有单独 A 作为源点,两个 A 共存的栈作为汇点 bfs 检查是否有路径即可。当然我们还要检查只使用一操作能不能消出空栈,以及能不能消完。
复杂度 \(O(\sum nm)\)。
419 湖南集训2021 Day4T2 梧桐依旧
很精致的题目,场上只有 wyl 通过,而且据说是观察出来的式子,非常恐怖。
如果掌握一些 q 相关科技这题应该比较简单,可惜我不会。
我们将这样的 \(A\) 看作变换 \(B\) 下的不动点,逆用 Burnside 引理 \(|X/G|=\frac{1}{|G|}\sum_g|X^g|\),只需求 \(|X/G|\) 与 \(|G|\)。
后者即 \(B\) 的数量,满秩矩阵数量只需从前往后考虑方案数:
还需考虑计算等价类数量,我们枚举 A 的秩 \(k\),容易发现只需关心 \(k\) 行,我们注意到 \(A\rightarrow BA\) 是一个 \(A\) 到 \(A\) 的映射,且每个矩阵的出现次数都是 \(B\) 的数量,因此这一部分的方案数为:
复杂度 \(O(n)\)。
420 Planetarian
shaber 题。
我们只关心两个后缀的 lcp,在 parent tree 上做 dsu on tree 即可得到 \(O(n\log n)\) 个支配对。
不妨先考虑如何计算 \(f(l,r)\),对于后缀 \(\operatorname{lcp}(S_x,S_y)=z\),其贡献是 \(\min(z,r-y+1)\),要求 \(l\leqslant x\leqslant y\leqslant r\),我们分讨拆开 \(\min\) 即变为二维偏序,主席树维护即可。
接下来二分答案,检查保留 \(a_i\leqslant mid\) 的位置是否有解,我们找到 \(l\) 后第一个 \(>mid\) 的位置与 \(r\) 前第一个 \(>mid\) 的位置,我们暴力计算这两个散块,中间每一个 \(\leqslant mid\) 的块都是区间最小值的控制区间(即作为区间最小值,最左的 \(l\) 与最右的 \(r\)),其只有 \(n\) 个。离线按照权值从小到大加入这些区间,主席树记录一下权值就好了。
复杂度 \(O(n\log^2 n)\),常数非常大。一个卡常技巧:我们有时只需查询区间最值是否 \(\geqslant z\),若这个线段树结点整体 \(<z\) 就不递归下去。
421 CF1086F Forest Fires
\(O(n^3\log n)\) 的做法很显然,注意到答案是关于时间的 \(O(n^2)\) 段三次函数(交的面积是二次函数,并的面积是交的线性组合,仍然是二次,求和变三次),每次做矩阵面积并 \(O(n\log n)\)。
事实上本题可以做到 \(O(n^2)\),我们直接列出矩阵交容斥的式子:
\(F_S(t)\) 表示点集 \(S\) 在时刻 \(t\) 的交集大小,列出式子后可以发现其只与,\(x,y\) 坐标最大最小值有关。
注意到一个关键性质——若已经确定 \(x,y\) 最值确定的矩形,矩形内部若有点贡献一定为零。
枚举左右边界的两个点,这两个点形成的矩形内部一定不能有点。此时只会有四种情况:只有这两个点,这两个点加上纵坐标前驱/后继,同时加上。
系数容易计算,维护前驱后继只需枚举一个点,另一个点按照横坐标倒序枚举,只需支持删除一个可能成为前驱后继的点,使用链表维护即可,复杂度 \(O(n^2)\)。
注意横坐标可能相同,事先钦定一个顺序会更好实现。