XYD-省选 | 解题技巧
Meta Hacker Cup 2024 R1C Substantial Losses
初始 \(x=y=m\)。每过一秒 \(x\) 会等概率变成 \(x-1\) 或 \(x+1\),并更新 \(y\gets \min(x,y)\)。特别地,如果此时 \(x=y+n\),则 \(x\) 一定会变成 \(x-1\)。问 \(x\) 变成 \(0\) 的期望时间。\(n,m\le 10^{18}\)。
因为每次减少 \(1\) 的情况都是相同的,所以答案是 \(y\to m-1\) 期望时间的 \(m\) 倍。
设 \(m=1,f(x)\) 表示 \(x\) 第一次变成 \(0\) 的期望时间。
第一个式子可以得到 \(f(x)=2f(x+1)-f(x+2)-2\),第二个式子可以得到 \(f(n)=f(n+1)+1\)。
设 \(f(n+1)=t\),可以逆推得到每个 \(f(x)\) 关于 \(t\) 的表达式。通过 \(f(0)\) 解出 \(t\),然后反代求出 \(f(1)\)。递推过程可以用矩阵快速幂加速。本题答案为 \((2n+1)m\)。
P6835 [Cnoi2020] 线形生物
如果直接设 \(f_i\) 表示从 \(i\to n+1\) 的期望步数的话,有后效性,需要高斯消元求解。时间复杂度会爆的。
于是设 \(f_i\) 表示 \(i\to i+1\) 的期望步数,这样子就没有后效性可以直接递推了。
令 \(g\) 为 \(f\) 的前缀和。度数和边集都不考虑 \((i,i+1)\),据期望的线性性可以得到 \(j\to i\) 的期望步数为 \(s_{j-1}-s_{i-1}\)。那么有
推一下式子就可以得到,\(f_i=1+\sum (s_{i-1}-s_{j-1}+1)\)。
P3320 [SDOI2015] 寻宝游戏
典题,直接用 std::set 维护 dfs 序即可。
如果只有插入没有删除,能否线性?
不妨设 \(1\) 为关键点,最后再减去这部分贡献即可。于是有一条边能贡献,当且仅当其子树内有关键点。考虑插入的时候,暴力把其上方所有边标记为 \(1\),如果遇到了
被标记的边就直接退出,这样子每条边只会被标记一次,时间复杂度线性。
如果起点固定,且不用回到起点?
将起点当成关键点,不用回到起点就是减去某点到起点的距离,维护所有关键点到起点的距离即可。
如果不用回到起点?
维护关键点集合的直径。动态加减点维护直径可以用 P2056 [ZJOI2007] 捉迷藏 中的 trick 来维护。可以用线段树维护区间直径,每次 pushup 相当于“重构”。
QOJ3770.Minimum Spanning Tree
诈骗题。先考虑原图为树,或者我们固定所选边集的情况。可以发现是关于 \(t\) 的一次函数,肯定在端点处取极值。于是直接算 \(l\) 和 \(r\) 的情况即可。
QOJ8936. Team Arrangement
\(60\) 的划分数很小,直接暴搜即可。直接搜索出所有可能的集合大小。然后对应拿点匹配一下。
同样的结论,还有 \(n\le 48\) 的图,最短路的路径个数最多为 \(3^{\frac{n}{3}}\)。
CF2038K Grid Walk
有固定贡献 \(\sum\limits_{i=1}^n (\gcd(i,a)+\gcd(i,b))\)。其余贡献是横向移动的 \(\gcd(i,a)\) 和竖向移动 \(\gcd(j,b)\)。
设 \(A\) 表示 \([1,n]\) 之内与 \(a\) 互质的最大数,\(B\) 表示 \([1,n]\) 之内与 \(B\) 互质的最大数。结论就是经过 \((A,B)\) 肯定不劣,且代价为 \(A-1+B-1\)。这个很好证明。
另一个结论就是 \(n-A\) 和 \(n-B\) 一定很小,于是剩余部分就是暴力 dp。
其实可以直接用 P9521 [JOISC 2022] 京都观光 的结论来做,不用 \(\gcd\) 的特性。
P6845 [CEOI 2019] Dynamic Diameter
典题,直接用线段树维护欧拉序即可。
QOJ5423. Perfect Matching
这不就是 CF1519E Off by One 吗?直接对于一个点 \(i\),将其设为一条边,然后连接 \((a_i-i,a_i+i)\)。于是这个就转化为了图上的一个边匹配问题。
可以建立 dfs 树,如果自己有偶数条可用子孙边就自己内部匹配。如果有奇数条的话,就是把连接父亲的边拉下来匹配。返祖边用来给祖先匹配。
CF1578A Anti-Tetris
可以发现放入一个块其实是阻挡后续块的很不优。考虑时间倒流,可以发现拿走一个块是不劣的,因为可以为其他块留出更大空间,于是直接选取能取出的块直接取出即可。
CF1622E Math Test
直接 \(2^n\) 枚举绝对值即可。
看看根据系数大小来分配权值,注意这里没有区间范围限制,因为如果我们不符合绝对值拆开的要求的话肯定是不优的。
P4745 [CERC2017] Gambling Guide
设 \(f_u\) 表示 \(u\) 到终点所需要的最少抽票数。
在某点抽票之后有两种策略,一种是直接走,还有一种是重新抽。
可以发现这个取 \(\min\) 非常影响推导,我们可以按照 Dijkstra 的顺序来转移就能消除 \(\min\) 了。时间复杂度 \(O(m\log m)\)。
QOJ9854. Find the Maximum
这样子就消去 \(x\) 了,直接令 \(x=\dfrac{\mathrm{ave(S)}}{2}\),这样子答案就是 \(\dfrac{\mathrm{ave^2(S)}}{4}\)。
首先有一个很显然的事情就是一堆数选择一些数使得平均数最大,直接选择最大的数即可。这题要求至少选择一条边,也就是两个点,但是注意到首次选了两个点之后再选点只用选择一个就行了。所以结论是本题最多选择三个点。
类似思想:不包含长度为 \(3\) 的回文串,直接考虑 \(3,4,5\) 就行了。
某题
给定一个大小为 \(n\) 的不可重集合 \(S\),需要找到 \(k,b\),满足 \(k\ge 2\),最大化 \(|\{kx+b|x\in Z\}\cap S|\)。其中 \(n\le 10^5,S_i\le 10^9\)。
两个未知数 \(k,b\),如果能钦定经过某两点,那就可以解出 \(k,b\) 了。
发现 \(k\) 越小能覆盖到的地方越多,因此先搞出答案下界,\(k=2\) 的时候,答案至少为 \(\lceil\dfrac{n}{2}\rceil\)。
假设存在更优的答案,那么从 \(S\) 中随机选出两个数,至少有 \(\dfrac{1}{4}\) 的概率抽到更优答案中的两个数,从而确定 \(k,b\)。把这个操作重复 \(100\) 次就行了。
P2791 幼儿园篮球题
不会数学。
P5223 Function
由递推式可以知道 \(f_{i,j}\) 是关于 \(i\) 的 \(j-1\) 次多项式,由于单点是多项式,所以行内前缀和也是多项式。暴力算出 \((2k,2k)\) 以内的所有值,对于行内前缀和得到的若干个点进入拉格朗日插值,并带入 \(n\) 就可以得到答案了。

浙公网安备 33010602011771号