仙人掌联盟 多校联测 NOIP 模拟赛

仙人掌联盟 多校联测 NOIP 模拟赛

NOIP 模拟赛(七)

移动机器人(move)

按题意模拟,前缀和维护一段操作即可。

子区间(subarray)

考虑对 \(a\) 从小到大进行填数。考虑分治。假设当前分治区间为 \([L,R]\),则将所有 \(i\in[L,R],(R-i+1)(i-L+1)=b_i\) 填上当前分治的数,并分割为若干段小区间向下分治。

考虑每次只取距离 \(L\) 和 \(R\) 最近的 \(i\) 进行分治,则时间复杂度为启发式合并。

表演(show)

考虑将每两个点划为一组(可相交),则每组点中至少有一个关键点。考虑 dp 状态 \(f_{u,k,0/1/2}\),表示点 \(u\) 子树内选了 \(k\) 个关键点,且点 \(u\) 不是关键点且和父亲一组/点 \(u\) 和儿子一组/点 \(u\) 是关键点且可以选择和父亲一组。树上背包即可。注意三种状态的转移须不重不漏。

**游戏(ladder)

没改。

[P14768 ICPC 2024 Seoul R] Ladder Update - 洛谷

NOIP 模拟赛(八)

骑车(bike)

画出 \(v-t\) 图。将其划分为一个 \(s\) 的等腰直角三角形、若干 \(v\) 的等腰直角三角形和若干平行四边形。容易观察到一些关于 \(v\) 的同余性质。在此基础上,注意到所有在较右侧的平行四边形尽可能放在较左侧是一定不劣的,这样可以尽量减少 \(v\) 的等腰直角三角形的数量,且同余性质不会改变。二分即可。

标签(attach)

注意到一个性质:在某一时刻,若 \(k\) 这个数会被保留,当且仅当存在一个位置 \(i\),使得 \(i\) 及其之后的位置中 \(\geq k\) 的数的数量,大于在 \(i\) 及之后已经被打上标签的数的数量。然后拿线段树维护即可。

图论(gragh)

没改。

钦定(color)

没改。

NOIP 模拟赛(十一)

梦境(dream)

考虑拿一个 set 维护所有为 \(1\) 的数。考虑删除时可以一次性删掉很多数,但还得一个一个加回来。于是可以对于删除操作可以对于每一个需要删除的点暴力操作,复杂度是均摊 \(O(n)\) 的。对于点的加入和删除,考虑两棵线段树维护每个点所在连续 \(1\) 的段的左右端点。

黄金矿工(game)

考虑 dp。\(f_{i,0/1/2}\) 表示考虑到第 \(i\) 列,且第 \(i\) 列连通块的选取状态为第一行/第二行/两行均选。注意到题目所求即为最大值的最小值状物。注意到当存在一列为一个 \(1\) 和一个 \(0\) 时,且先手的连通块包含且仅包含其中的 \(1\),则后手可以另起贡献减少 \(2\)。令这样的列的个数为 \(cnt\),则后手至多进行 \(\max(cnt,m)\) 次这样的操作。其余情况的列后手均无法产生负贡献。

假设连通块的总的选取状态状态为 \(S\),则:

\[\begin{align*} ans &= \max_S((\sum_{(x,y)\in S}[a_{x,y}=1]-[a_{x,y}=0])-2\min(cnt,m)) \\ &= \max_S((\sum_{(x,y)\in S}[a_{x,y}=1]-[a_{x,y}=0])-2cnt,(\sum_{(x,y)\in S}[a_{x,y}=1]-[a_{x,y}=0])-2m) \end{align*} \]

惊喜(tree)

没改。

CF809E Surprise me! - 洛谷

行走于真实之道(path)

首先,对于 \(r_i \le b_i\) 的点,直接染蓝色肯定不劣。每个点染成红色或蓝色,考虑最小割建模。对于 1 的点,源点向其连边 \(r_i\),其向汇点连边 \(b_i\);对于 0 的点,源点向其连边 \(b_i\),其想汇点连边 \(r_i\)。然后对于每个 1,向其后面的每个 0 连边,流量为 \(1\)。答案即为 \(\sum b_i+r_i\) 减去最小割。

关注到边数是 \(O(n^2)\) 的,考虑模拟最大流。首先每个点都流满 \(b_i\) 的流量,则对于所有 1 的点,还可以流出 \(r_i-b_i\) 的流量。从前向后遍历,考虑到每个 0 只能从他前面的每个 1 分别获得 \(1\) 的流量,则贪心地取剩余流量前 \((r_i-b_i)\) 大的 1 即可。

整理:从前向后遍历,遇到 \(1\),加入元素 \(r_i-b_i\)。遇到 0,前 \(r_i-b_i\) 大元素减一并维护答案,同时删去为 \(0\) 的元素。平衡树(FHQ-Treap)维护即可。

NOIP 模拟赛(十二)

刺客(assassin)

反悔贪心即可。

法与律(fa)

考虑对于一类本质相同的串,用字典序最小的一个串代表这一类串,则题目转化为求这样的串的数量。

考虑状压。\(f_{i,S}\) 表示填到第 \(i\) 位,第 \(i+1\) 位不能填的数字的集合为 \(S\)。则对于转移 \(f_{i-1,S} \rightarrow f_{i,T}\),第 \(i\) 位若填 \(v (v\not\in S)\),则第 \(T\) 应包含 \(u\) 满足 \((\exists (u_i,v_i)=(u,v)) \land (u<v \lor u\in S)\)。

序列(sequence)

最小合并次数即最大划分数。设 \(f_i\) 表示考虑到第 \(i\) 位,最大的划分段数。设 \(pre_i\) 为 \(f_i\) 对应的最后一段的和,\(s_i\) 为 \(\sum_{k=1}^i a_i\),则:

\[f_i=\max_{0 \le j < i \land pre_j \le s_i-s_j} f_j+1 \]

考虑在合法情况下,\(pre_i\) 尽可能小是一定不劣的,即 \(j\) 尽可能大。注意到该 dp 转移满足决策单调性。

此处应当有 inf 种方法优化这个 dp。官解给出了一种堆优化的做法:按 \(pre_j+s_j\) 为关键字维护小根堆,转移 \(f_i\) 时不断弹堆直到堆顶不合法,是一定最优的。然后将 \(i\) 入堆即可。

冬(winter)

考虑每个叶子节点必须选。

首先考虑 \(c \geq \max dep_i\) 的情况,答案显然是叶子节点个数。

于是至多有树高个不同的 \(c\) 需要处理。考虑离线。我们称需要选的点为关键点。考虑选一个点 \(u\) 后,\(u\) 到其 \(c-1\) 级祖先这条链上的所有点都不必要选,下一个应当选的点为 \(u\) 的 \(c\) 级祖先。

考虑用队列存所有可能的关键点。对于每个可能关键点 \(u\),若其为被覆盖则统计答案并将其 \(c\) 级祖先加入队列。判断覆盖可用线段树 \(O(\log n)\) 维护。不计叶子节点,对于一个 \(c\) 至多有 \(O(\frac{n}{c})\) 个合法的关键点,复杂度为调和级数即 \(O(n \log^2n)\)。

其实这样理论时间复杂度是对的,但是由于对于每个 \(c\),初始都要将所有叶子节点入队,常数巨大。考虑 \(ans_c\) 初始值直接赋为叶子个数,并用集合 \(S_c\) 维护所有叶子节点的 \(c\) 级祖先,在处理每个 \(c\) 时,初始直接将 \(S_c\) 全部入队。\(S_c\) 可从 \(S_{c-1}\) 动态变化而来。\(\sum_{c=1}^{\max dep_i} |S_c|=n\)。常数极大减小。

NOIP 模拟赛(十三)

遍历(traverse)

考虑 dp。dp 转移时贪心地考虑遍历儿子的顺序。\(f_u\) 表示子树 \(u\) 内的答案,\(v_i\) 为 \(u\) 的所有儿子按特定顺序排序,则:

\[f_u=\max(a_u,1+\max_{i=1}^k \{2 \times \sum_{j=1}^{i-1}siz_{v_j}+f_{v_i} \}) \]

考虑邻项交换贪心。考虑若 \(x\) 比 \(y\) 更优,需满足:

\[\max(f_{x},2 \times siz_{x}+f_{y})<\max(f_y,2\times siz_y+f_x) \]

于是将 \(u\) 的所有儿子按 \(2\times siz_x-f_x\) 升序排序即可。

哀人(B)

求 \([l,r]\) 的方案数,考虑拆为求 \([1,V],V\in\{l,r\}\) 的方案数。不难发现,\(y\) 是关于 \(x\) 单调不降的,于是可以二分求出 \(V\) 对应的最大的 \(y\)。注意到一个 \(x\) 可能对应多个合法的 \(y\),于是可以容斥解决。

回文串(palindrome)

考虑并查集维护两个位置是否相同。考虑时间复杂度是启发式合并的。考虑两棵线段树分别维护向前和向后的哈希值,每次操作从中心点向外二分找到第一个不同的位置进行合并即可。时间复杂度 \(O(n\log^2n)\)。

资源分配(resources)

没改。

P8978 「DTOI-4」中位数 - 洛谷 (luogu.com.cn)

NOIP 模拟赛(十四)

计数(number)

两个关键的式子:

  1. 利用二项式定理的推导:

\[\sum_{j=0}^n {n\choose j} 2^{n-j}1^j=(2+1)^n=3^n \]

  1. 另一常用公式:

\[j {n \choose j}=n{n-1 \choose j-1} \]

长街余音(refrain)

首先有:取到答案的中位数必为全局中位数。令 \(val\) 为全局中位数, \(v_i=\left\{\begin{aligned} &-1, & a_i<val \\ &0, & a_i=val\\ &1, &a_i>val \end{aligned}\right.\),\(c_i=\sum_{k=1}^i v_i\),\(s_i=\sum_{k=1}^i[v_i=0]\)。于是有转移:

\[f_i=\sum_{(0 \le j < i) \land (i\not\equiv j\pmod 2)\land(|c_i-c_j|\le s_i-s_j)} f_j+1 \]

关注到 \(|c_i-c_j|\le s_i-s_j\) 等价于:

\[(s_j-c_j\le s_i-c_i) \land (s_j+c_j \le s_i+c_i) \]

于是变为三维偏序问题。cdq 分治优化即可。

聚拢(merge)

没改完。

交换 Kubic 2 - Problem - QOJ.ac

长链礼仪(ritual)

没改。

NOIP 模拟赛(十五)

区间平移(shift)

一组区间的两个区间的四个端点分别相交时取四个时刻,对所有 \(4n\) 个时刻扫描线即可。

连号标记(serial)

有:对于一棵固定形态的树,往进填一个排列,形成堆的方案数是:

\[n!\prod_{i=1}^n \frac{1}{siz_i} \]

然后即可树上背包。最后容斥(二项式反演)统计答案即可。

信号汇聚(relay)

考虑区间 dp:\(f_{l,r,p}\) 表示 \([l,r]\) 走到 \(p\) 的代价。考虑优化状态为:\(f_{u,p}\) 表示 \([u,p]\) 或 \([p,u]\) 走到 \(p\) 的代价。\(O(n^4)\) 转移。

货运通道(freight)

显然存在从右向左扫一遍的 \(O(nq)\) 做法,且遍历的过程和 \(k\) 无关。考虑线段树维护,因为要和 \(0\) 取 \(\max\),修改时先递归右儿子,再将右儿子得到的结果下传到左儿子,递归时加若干限制条件可保证时间复杂度正确。

NOIP 模拟赛(十六)

锦里客流(volume)

考虑贪心地先取 \([1,n]\),每次处理完后左边和右边分别向内缩,加入优先队列即可。

川剧复演(opera)

考虑 dp:\(f_{i,j}\) 表示考虑到第 \(i\) 位,末尾有长为 \(j\) 的排列。矩阵快速幂优化即可。

山城巷图(alley)

考虑一个点 \(x\) 的颜色什么情况下会计入统计,当且仅当选了他自己或选了两个来自不同儿子的子树的点。考虑若一个区间 \([l,r]\) 即可令 \(x\) 计入统计,则区间 \([L,R] \supseteq [l,r]\) 是没有实际意义的。用 set 维护子树内所有点,在合并子树信息时,启发式合并,找枚举的点的前驱后继,这样就是最小可令 \(x\) 产生贡献的区间。于是可以统计所有有实际意义的可产生贡献的区间。

选两个不同儿子必存在一个轻儿子。任意节点向父亲跳,跳到根节点,至多会经过 \(O(\log n)\) 条轻边。于是每个点最多被计数 \(O(\log n)\) 次区间,计数出来的总区间数是 \(O(n\log n)\) 的。

处理出这些区间后,将所有询问离线对右端点扫描线即可。

长江灯会(lantern)

没改。

NOIP 模拟赛(十七)

传递能量(energy)

额……赛时瞎写了个代码咋就 AC 了(

令所有 \(a_i\) 最后变换为 \(v\)。注意到 \(v\) 一定可以变换为 \(v-1\),于是 \(v\) 存在单调性。考虑二分。令 \(b_i=a_i-v\)。只要 \(>0\) 就往后给,扫两遍,若 \(\min b_i' \geq 0\) 则 \(v\) 合法。最后对二分出的 \(v\) 再 check 一遍,若 \(b_i\) 全为 \(0\) 则有解。

分数(score)

考虑极值分治。于是现在只需要考虑统计 \([l,r]\) 内为 \(a_i\) 的子集/超集的数的个数。此处应当存在高低位分治/折半搜索的方法。但是我们可以直接分块。分块初始化时使用高维前缀和即可。

数组(array)

考虑差分。设 \(c_i,d_i\) 分别为 \(a_i\) 和 \(b_i\) 的差分数组。一共要走 \(n+m-1\) 步,对于第 \(k\in[2,n+m-1]\) 步,设这一步前位于 \((i,j)\),若下一步走 \((i+1,j)\),则产生 \(c_i(n+m-i-j)\) 的贡献;若走 \((i,j+1)\) 则产生 \(d_i(n+m-i-j)\) 的贡献。除了 \((1,1)\),后面 \(c_{i\in[2,n]}\) 和 \(d_{i\in[2,m]}\) 的顺序都是可以自行决定的。于是可以线段树维护 \(d_i\) 及其贡献,然后查询时归并排序统计答案即可。

篮子(basket)

没改。

NOIP 模拟赛(十八)

红绣花(A)

打表发现,可枚举从大到小枚举边权 \(w\),将 \(w\) 和 \(w\times p_i\) 连边。并查集维护连通性即可。

排序(sort)

简单的期望题。令 \(f_i\) 为长为 \(i\) 的排列(钦定无粘连体)归 \(1\) 的期望步数,\(g_{i,j}\) 为随机的长为 \(i\) 的排列有 \(j\) 个粘连体的方案数。有:

\[\left\{ \begin{array}{ll} g_{i,j} & \longrightarrow g_{i+1,j} \\ g_{i,j} \times j &\longrightarrow g_{i+1, j+1} \\ g_{i,j} \times (i-j) &\longrightarrow g_{i+1,j+2} \end{array} \right. \]

\[f_i=1+\sum_{j=1}^i \frac{g_{i,j}}{i!}\times f_j \]

\[Ans=\frac{1}{n!}\sum_{i=1}^n g_{n,i}\times f_i \]

看不见的人(C)

考虑集合 \(A,B\),先将其排序。对于 \(A_i\),其能产生贡献当且仅当 \(A_i \le B_{m-i+1}\),即 \(A,B\) 集合中至少有 \(m\) 个数比 \(A_i\) 大。则 \(S_{i,j}\) 能产生的贡献即为 \(S_{i,j} \times \sum_{k=1}^n [i \not= k\land S_{i,j} \le S_{k,m-j+1}]\)。考虑用 \(m\) 个数据结构对每一位分别维护。修改时还要考虑其他位产生的贡献。\(S_{i,j}\) 更改时,可能被影响的贡献为:\(\sum_{k=1}^n [k\not =i \land S_{k,m-j+1}\le S_{i,j}] \times S_{k,m-j+1}\)。

建议对每一位分别离散化后使用树状数组。用动态开点线段树或平衡树会被卡。

魔法(magic)

没改。

[P8171 CEOI 2021] Diversity - 洛谷 (luogu.com.cn)

posted @ 2026-10-18 14:52  Zctf1088  阅读(25)  评论(0)    收藏  举报