仙人掌联盟 多校联测 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\),则:
惊喜(tree)
没改。
行走于真实之道(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\),则:
考虑在合法情况下,\(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\) 的所有儿子按特定顺序排序,则:
考虑邻项交换贪心。考虑若 \(x\) 比 \(y\) 更优,需满足:
于是将 \(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)
两个关键的式子:
- 利用二项式定理的推导:
- 另一常用公式:
长街余音(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]\)。于是有转移:
关注到 \(|c_i-c_j|\le s_i-s_j\) 等价于:
于是变为三维偏序问题。cdq 分治优化即可。
聚拢(merge)
没改完。
长链礼仪(ritual)
没改。
NOIP 模拟赛(十五)
区间平移(shift)
一组区间的两个区间的四个端点分别相交时取四个时刻,对所有 \(4n\) 个时刻扫描线即可。
连号标记(serial)
有:对于一棵固定形态的树,往进填一个排列,形成堆的方案数是:
然后即可树上背包。最后容斥(二项式反演)统计答案即可。
信号汇聚(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\) 个粘连体的方案数。有:
看不见的人(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)
没改。

浙公网安备 33010602011771号