Loading

2026省选集训题解

P8428 [COI 2020] Pastiri

一类非常经典的树上贪心思路。考虑这样一个贪心:每次找到没有被管辖的深度最大的一头羊,然后在其祖先中找到深度最浅的并且能够管辖这头羊的点,在这个点上放置一个牧羊人。我们声称这样是最优的,设这头羊为 \(X\),这个祖先是 \(P\),那么对于任意一个 \(P\) 的子树中一个 \(X\) 的兄弟子树中的点 \(Q\),即一个与 \(X\) 不在同一子树内的 \(P\) 子孙 \(Q\)\(Q\) 能够管辖的点一定被 \(P\) 包含,反证法:

不是 \(P\) 的点能够管辖的点都被 \(P\) 包含,那么 \(P\) 自然就是最优的。

因此我们可以得到一个看似 \(O(n^2)\) 的暴力,即将所有羊按照 \(dep\) 从深到浅排序处理,如果这个羊已经被管辖就跳过,否则暴力找其最浅的祖先 \(P\) 使其能够管辖这头羊,然后再标记 \(P\) 能够管辖的所有羊即可,对于判断是否可以管辖,我们可以对每个点求出离它最近的羊的距离 \(d_u\),这个可以直接多源bfs求出,然后可以直接判断 \(d_P=dep_u-dep_P\)。分析一下,由于跳上去之后可以将这一整条链都标记,所以找 \(P\) 均摊下来其实是 \(O(n)\) 的,而覆盖所有能够管辖的点本质就是一个标记点的 \(\mathrm{dfs}\),那均摊也是 \(O(n)\) 的。

因此这样时间复杂度就是 \(O(k\log k+n)\),可以通过。

P12558 [UOI 2024] Heroes and Monsters

赛时已经想到 \(O(n^3)\) 做法了,但是没有想到前后分开dp最后拼接的思想。

最优显然是对位匹配,令选择的集合为 \(S\),则:

  • \(S\) 的第 \(i\) 小要与 \(b_i\) 匹配。

  • 不在 \(S\) 中的第 \(i\) 小要与 \(b_{|S|+i}\) 匹配。

于是可以设计出很傻的 \(O(n^3)\) \(\mathrm{dp}\),但是由于我们要对位匹配,必须要枚举 \(m=|S|\) 来确定配对关系,令 \(dp_{i,j}\) 表示前 \(i\) 位中选择 \(j\) 个数的方案数,则

\[dp_{i,j}=dp_{i-1,j-1}\cdot[a_i>b_j]+dp_{i-1,j}\cdot [a_i<b_{m+i-j}] \]

这样是没有前途的。观察一下这个 \(\mathrm{dp}\),每次都受 \(m\) 的影响很唐,考虑能不能暂时去掉 \(m\) 的限制。先考虑对限制变形:

  1. \(S\) 的第 \(i\) 小要与 \(b_i\) 匹配。

  2. 不在 \(S\) 中的\(i\) 大要与 \(b_{n-i+1}\) 匹配

可以发现,此时限制与 \(m\) 无关了,我们容易想到对这两个限制分别跑一个前缀和后缀的 \(\mathrm{dp}\),分别只满足1,2的条件。这个是easy的,用 \(f_{i,j},g_{i,j}\) 分别表示前缀后缀,分别只受第1/2个条件限制,选择 \(j\) 个数的方案数,则:

对于前缀:

\[f_{i,j}=f_{i-1,j}+f_{i-1,j-1}\cdot [a_i>b_j] \]

对于后缀:

\[g_{i,j}=g_{i+1,j-1}+g_{i+1,j}\cdot [a_i<b_{i+j}] \]

如果我们随便将序列分成 \([1,x]\)\([x+1,n]\) 两部分拼起来,使得 \([1,x]\) 只满足1,\([x+1,n]\) 只满足2,但是 \([1,x]\) 中没选的数可能不满足2,\([x+1,n]\) 选的数可能不满足1,因此不能随便拼起来,因此我们需要找到一个特殊的分界点 \(x\),使得 \([1,x]\) 中没选的数天然满足2,\([x+1,n]\) 选的数天然满足1

我们声称,找到 \(x\) 使得 \(a_x<b_m<a_{x+1}\),则这个 \(x\) 就是一个合法的分界点,因为此时左边没有选的第 \(i\) 大数在右边对应 \(b_{m+x}>b_m>\max\limits_{i\le x}a_i\),因此一定合法,右边同理。那这个 \(x\) 可以直接双指针找到,就是最大的 \(a_x<b_m\),那么就可以直接拼起来了,枚举左边选了 \(k\) 个,那么贡献就是 \(\sum\limits f_{x,k}\cdot g_{x+1,m-k}\)

因此时间复杂度 \(O(n^2)\)


P10220 [省选联考 2024] 迷宫守卫

有点难。先考虑我们如何求出第一个数在两人采取最优策略下的值,考虑二分这个数 \(x\ge mid\),判断使得这个数 \(\ge mid\) 时A需要的最小花费,考虑 \(\mathrm{dp}\),令 \(f_u\) 表示使得 \(u\) 子树内第一个数 \(\ge mid\) 的最小花费,则对于叶子,\(f_u=[q_u<mid]\cdot \mathrm{inf}\),对于非叶节点,有 \(f_u=\min(f_{lc}+f_{rc},f_{lc}+w_u)=f_{lc}+\min(f_{rc},w_u)\),这是因为无论限制还是不限制,B一定可以往 \(lc\) 走,所以至少要花 \(f_{lc}\),而A可以通过 \(w_u\) 的代价强制让B走到 \(lc\)

于是我们可以计算出最优策略下的第一个数了,这样也就确定了B第一步会怎么走下去,考虑用 \(\mathrm{dfs}(u,K)\) 表示走到 \(u\) 时,在这个子树中可以分配的花费上界为 \(K\) 时,在这个子树内走出的结果以及这个子树实际使用的花费。

现在这个子树内二分出这个子树内的第一个数为 \(x\),并求出 \(f\),那么 \(f_u\) 就表示要维持第一个数为 \(x\) 所至少需要的花费,我们称这个为维持的强制代价。

  • 如果 \(x\)\(rc\),那说明A没有在这里花费,因此为 \(lc\) 预留 \(f_{lc}\) 的强制代价后,可以递归到 \(g=\mathrm{dfs}(rc,K-f_{lc})\),然后跑到 \(lc\),跑 \(\mathrm{dfs}(lc,K-g)\)

  • 如果 \(x\)\(lc\),则这个可能是B自愿走的,也可能是A必须花费一个 \(w_u\) 导致的。那么我们先走下去,预留 \(\min(f_{rc},w_u)\) 的强制代价,\(g=\mathrm{dfs}(lc,K-\min(f_{rc},w_u))\),然后我们需要判断是否花费 \(w_u\)。如果A不在此处花费 \(w_u\),B即使往 \(rc\) 走了A都有足够的钱来维持,即满足 \(K\ge f_{rc}\),那么就不需要花费 \(w_u\),因为预留更多显然更优,否则就需要花费 \(w_u\)

时间复杂度 \(O(n2^n)\)


CF1278F Cards

首先 \(E(x^k)\)\(E(x)^k\) 是不同的,考虑 \(E\) 的意义,我们枚举 \(x=i\),得到:

\[\begin{aligned} E(x^k) &= \sum_{i=0}^n \binom{n}{i}p^i(1-p)^{n-i}i^k \\ &=\sum_{i=0}^n \binom{n}{i}p^i(1-p)^{n-i}\sum_{j=1}^{k}{k\brace j}i^{\underline{j}} \\ &=\sum_{j=1}^{k}{k\brace j}\boxed{\sum_{i=j}^n \binom{n}{i}p^i(1-p)^{n-i}i^{\underline{j}}} \\ \end{aligned} \]

后面的部分继续化简:

\[\begin{aligned} A &= \sum_{i=j}^n \binom{n}{i}p^i(1-p)^{n-i}i^{\underline{j}} \\ &= j!\sum_{i=j}^n \binom{n}{i}\binom{i}{j}p^i(1-p)^{n-i} \\ &= j!\sum_{i=j}^n \binom{n-j}{i-j}\binom{n}{j} p^i(1-p)^{n-i} \\ &= j!\binom{n}{j}\sum_{i=j}^n \binom{n-j}{i-j} p^i(1-p)^{n-i} \\ &= j!\binom{n}{j}\sum_{i=0}^{n-j} \binom{n-j}{i} p^{i+j}(1-p)^{n-i-j} \\ &= j!\binom{n}{j}\times p^j\times \sum_{i=0}^{n-j} \binom{n-j}{i} p^i(1-p)^{n-j-i} \\ &= j!\binom{n}{j}\times p^j\times 1^{n-j} \\ &= n^{\underline{j}}p^j \end{aligned} \]

那就可以 \(O(k^2)\) 计算了。


P14867 [ICPC 2020 Yokohama R] Colorful Rectangle

去年省选模拟赛的坑,现在来填一下。

显然我们可以对每种颜色都枚举点 \((x_0,y_0),(x_1,y_1),(x_2,y_2)\),那么围住这些点的矩形大小可以通过 \(x,y\) 差算出。但是由于我们不知道其大小关系,并不能通过确定的算式计算。不过经过分析我们发现,其实本质不同的矩阵形态只有:

因为我们可以通过将 \(x\to -x / y\to -y\) 以及枚举三种颜色在 \(x\) 上的顺序 \((c_0,c_1,c_2)\),将所有本质相同的三点位置关系全部规约到上述两种“基础”情况,只不过这样我们需要枚举 \(2\times 2\times 6=24\) 种变换方式。

我们对两种“基础”情况分开讨论:

  • 情况一

    这种情况比较简单,可以枚举中间的绿点,然后直接做两个二维偏序就能得到 \(\max(x_2+y_2)\)\(\min(x_0+y_0)\),进而得到答案。

  • 情况二

    此时贡献为 \(x_2+y_2-x_0-y_1\),那么考虑将这个刻画成:在 \(0\) 处加入 \(-x_0\) 的贡献,在 \(1\) 处加入 \(-y_1\) 的贡献,在 \(2\) 处查询 \(\min\set{-x_0-y_1}\)。我们将这个看作维护数组 \(w,T\),支持:

    • \(w\) 单点对 \(X\)\(\min\)

    • \(T\) 区间对 \(w_i+Y\)\(\min\)

    • 查询 \(T\) 区间 \(\min\)

    考虑用线段树维护,对每个结点维护 \(w_i,T_i\) 的最小值记为 \(mn_u,dat_u\),以及这个区间中操作二的 \(Y\) 的懒标记 \(tag_u=Y_{\min}\)。那么对操作二,可以通过打标记实现,并将 \(T\) 的取 \(\min\) 推迟到下传标记时,具体的,向点 \(u\) 下放值为 \(Y\) 的标记时,将 \(dat_u\)\(mn_u+Y\)\(\min\) 即可。

    于是这种情况也得到解决。

因此总时间复杂度是 \(O(n\log n\times 24)\),可以通过。


三角形

想想想:\(a<b<c\),枚举 \(b,c\)\(a\) 应该选在哪里? 画个图,具体的,你考虑以最长边为底,固定次长边相当于顶点在一个定圆上转,那么 \(a\) 最短的时候顶点就是最低的,因此我们要最小化 \(a\),因此 \(a\) 最优是取大于 \(c-b\) 的最小值。

然后我们考虑枚举 \(k=c-b\),那么 \(a\) 就是确定的啦!赛时止步于此。

推推推:\((a+b+c)(b+c-a)(a+b-c)(a+c-b)=[(b+c)^2-a^2][a^2-(b-c)^2]\)

看看看:你注意到由于枚举了 \(k=c-b\),所以原式 \([(2b+k)^2-a^2][a^2-k^2]\),那不是直接令 \(b\) 取到最小就完了吗,于是此时 \(b\) 也要取到合法的最小值。

呵呵呵:考虑如何得到最小的合法的 \(b\),注意到 \(b\) 需要满足 \(b>a,b\in S,b+k\in S\),其中 \(S\) 表示数集,考虑用 bitset 做这个东西,用 bitset\(S\),那么 S&(S>>k)._Find_next(a) 就可以找到合法的最小的 \(b\),做完了。时间复杂度 \(O(\frac{nm}{\omega})\)

posted @ 2026-02-25 16:07  STDJCY  阅读(47)  评论(0)    收藏  举报