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(n)=\begin{cases}\dfrac{f(x-1)+f(x+1)}{2}+1&x\in [1,n] \\f(x-1)+1& x=n+1 \\0&x=0 \end{cases}\]

第一个式子可以得到 \(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=\dfrac{1}{d_i+1}(1+\sum\limits_{(i,j)\in E}(1+s_{i-1}-s_{j-1}+f_i)) \]

推一下式子就可以得到,\(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\) 到终点所需要的最少抽票数。

在某点抽票之后有两种策略,一种是直接走,还有一种是重新抽。

\[f_u=1+\sum\limits_{(u,v)\in E}\dfrac{\min(f_u,f_v)}{d_u} \]

可以发现这个取 \(\min\) 非常影响推导,我们可以按照 Dijkstra 的顺序来转移就能消除 \(\min\) 了。时间复杂度 \(O(m\log m)\)

QOJ9854. Find the Maximum

\[\sum\limits_{x\in S}\dfrac{-x^2+b_ux}{\lvert S\rvert}=-x^2+\mathrm{ave(S)}x \]

这样子就消去 \(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\) 就可以得到答案了。

posted @ 2025-02-21 00:45  Mirasycle  阅读(33)  评论(0)    收藏  举报