EDU VP 题解

题解笔记 · 2024-01-08 · 485 人浏览

Edu 160

A Rating Increase

枚举分割,能中止就中止。

B Swap and Delete

枚举删除数量,能否使得 $0$ 和 $1$ 数量相等。

C Game with Multiset

使用 map 统计每个数字个数,查询时从大到小能减则减。

D Array Collapse

发现对于序列的任意区间一定无法删除最小值。考虑在笛卡尔树上 DP。答案可以由两棵子树相乘,若在区间左边或右边存在祖先,则区间最小值可以被从左 / 右边删除。

E Matrix Problem

费用流建图,左侧点表示行,右侧点表示列,边表示网格中某个点,边权为 $1$ 或 $-1$ 分别对应点初始值为 $0$ 和 $1$。

Edu 159

A Binary Imbalance

注意到若能插入一次,便可以沿着插入无穷次。

B Getting Points

二分工作日数量,每天上节课并处理出最多可以完成的任务数量。

C Insert and Equalize

若从结果反过来考虑,可以发现过程中一定可以存在某个时刻序列除 $a_{n+1}$ 都等于原序列最大值,于是 $x$ 为原序列所有数与最大值的差的 $\gcd$。

D Divisibility Test

使用 map<pair<int, int>, set<int> > 维护访问每个坐标的对应时间。询问时分三类分讨。

E Collapsing Strings

哈希,处理出每个反串与所有原串的总匹配长度之和。

F Trees and XOR Queries Again

不难想到可以树上倍增合并线性基的 $3\log$ 做法,可以使用树上 ST 表优化掉一个 $\log$。

Edu 158

A Line Trip

对每个间隔取 $\max$,最后一部分要翻倍。

B Chip and Ribbon

每个位置增量之和即为答案。

C Add, Divide and Floor

注意到操作不会损失大小关系,只保留极值并每次操作对奇偶分讨即可。

D Yet Another Monster Fight

考虑若从某个位置开始,对前面和后面的影响。对其前缀后缀 $\max$ 后二分答案。

E Compressed Tree

树上 DP,DP 记录的值用于转移,并对每个位置分别统计答案,分离以上两个环节,可以非常整洁。

Edu 150

A Game with Board

先手最优策略是合并 $n-2$ 个。

B Keep it Beautiful

按照题意直接维护两个队列即可。

C Ranom Numbers

可以 DP,也可以考虑找出少量特殊位置暴力枚举。

D Pairs of Segments

既然对与对之间不交,就是典型的前缀 $\max$ 优化 DP。

E Rearrange Brackets

从下往上扫,一段区间被切割是不可逆操作了,用 set 维护区间及其出现时间,求出对应长度的数量。

Edu 61

A Regular Bracket Sequence

最优拼法形如 (( () )( ))

B Discounts

排序后贪心选总和减第 $k$ 大。

C Painting the Fence

考虑先枚举一个不出现的,前缀和支持查询区间覆盖数,覆盖恰好为 $1$ 的数。

D Stressful Training

最优构造是优先满足剩余时间短的。二分答案后优先队列即可卡过,可以对剩余时间桶排去掉一个 $\log$。

E Knapsack

看到这个首先意识到和 $\lcm$ 有关。若总和不超过 $W$ 是简单的,否则枚举剩余部分的大小,检查能否构造,注意不能先提前操作。

F Clear the String

相对暴力的做法是维护答案 $f_{l,r}$ 和区间设置成某一颜色 $g_{l,r,c}$ 的最小操作数。注意到对于区间 $[l,r]$ 若 $s_l=s_r$ 则一定可以一起删除,否则一定不可,可以只保留 $f$。

G Greedy Subsequences

好题,既然每个点的后继转移是固定的,考虑连边,发现可以形成森林。启发我们从后往前扫,弹出某个值即为将某个根拆除出几棵子树。相当于对某棵树的距离统一减 $1$。启发我们考虑 $dfs$ 序。良好性质是序列中点 $1,2,\cdots,n$ $dfs$ 序恰好为 $n,n-1,\cdots,1$,于是可以使用区间修改区间 $\max$ 的线段树解决。

Edu 36

A. Garden

挨个检查,限制是 $a_i \mid k$。

B. Browser

显然是到达 $l-1$ 或 $r+1$ 后删掉一侧再去另一侧。

C. Permute Digits

从高到低位填数,状压 DP,额外记录一维是否恰好在和 $b$ 相同。

D. Almost Acyclic Graph

考虑拓扑排序的过程,删掉一条边的意义为将一个点的入度减小 $1$。枚举这个点即可。

E. Physical Education Lessons

颜色段覆盖问题,直接使用珂朵莉树。

F. Imbalance Value of a Tree

可以拆成路径最大值和减路径最小值和。考虑其中的最大值,并对最小值同样处理。可以对边排序,遍历到每条边就将答案加入边两侧连通块大小之积的贡献,实现时可以倒着处理。

G. Coprime Arrays

显然有 DP $f_i$ 表示长度为 $n$,值域为 $i$ 的互质序列个数。转移是容斥,枚举序列的 $\gcd$,并减去对应的 $f_j$。考虑 $f_j$ 对 $f_i$ 的贡献,随着 $i$ 单调增系数也单调增,可以枚举系数并差分处理,复杂度调和级数, $O(n\log n)$。

Edu 35

A. Nearest Minimums

找到最小值后再扫一遍。

B. Two Cakes

枚举左右各分配多少个盘子。

C. Three Garlands

合法的情况当且仅当存在 $1$ 或两个 $2$ 或 $(2,4,4)$ 或 $(3,3,3)$。

D. Inversion Counting

注意到一次翻转只有造成的奇偶变化只和 $r-l$ 相关。

E. Stack Sorting

限制等价于序列一个顺序对 $(x,y)$ 后不能出现比 $x$ 小的数。记 $f_x$ 为已经加入的,不超过 $x$ 的数的数量,则加入一个数 $x$ 需要满足 $f_x = f_{f_x}$。

F. Tree Destruction

显然和直径相关,考虑先删除非直径的点,最远的叶子一定是直径的一个端点,然后再删除直径的链。

G. Mass Change Queries

存在一种线段树做法为维护每个节点的变色信息,记 $m$ 为值域,复杂度为 $O((n+q)m\log n)$。

有一种具有启发性的分块做法,对每个块维护并查集,困难在于 $x\to y,z\to x$ 的变化难以描述,可以使用 trick 用每个颜色的最先出现位置来代表这个颜色。

Edu 34

A Hungry Student Problem

枚举 $a$ 判断。

B The Modcrab

不难发现嗑药要在攻击前面,注意除法上取整。

C Boxes Packing

贪心用 priority_queue 维护单调子序列的末尾。

D Almost Difference

从头到尾扫,减去相差为 $1$ 的即可。注意溢出。

E Swapping Characters

hash 被卡了。考虑枚举第一个字符串交换的位置,与接下来的字符串比对,可以预处理每个字符串和原来的第一个串的差异,再对交换的位置单独处理即可做到。

F Clear The Matrix

不是很好写的状压,压缩最后 $4\times 4$ 的矩阵,限制操作只允许从第一列开始。

G Yet Another Maxflow Problem

这类问题一般都要考虑转最小割处理,图的形状由左右两条链和一些连接左右的边构成。考虑左右分别割断的位置,记为 $u,v$,通过恰当的处理 $a,b$ 和边权 $c$,那么贡献有 $a_u+b_v+\sum_{(x,y),x\le u,y\ge v}$,线段树扫描线即可。

Edu 33

A Chess For Three

维护每局下棋的双方。

B Beautiful Divisors

枚举 $k$ 一一检查。

C Rumor

购买一个即可解决一个连通块,并查集处理 $\min$。

D Credit Card

有趣的题,考虑只有晚上需要检查,才可能在早上去银行,若这一次的漏洞可以通过上一次去银行多补充而解决掉,这次就不操作,否则这次就先补上当前的漏洞,并记录,维护余额最大值以用来检查可不可以续加。

E Counting Arrays

考虑每个素因子的分配情况即可。

F Subtree Minimum Query

两个限制,分别通过 DFS 序和深度上限解决。主席树。

Edu 32

A Local Extrema

直接统计即可。

B Buggy Robot

发现上和下,左和右的操作数应当分别对应相等。

C K-Dominant Character

二分答案,前缀和求出任意区间包括的字符,状压后取交,检查是否空。

D Almost Identity Permutations

枚举 $p_i\neq i$ 的个数 $x$ 后,答案为 $\binom{n}{i}f_i$ 之和,其中 $f_i$ 为错位排列数。

E Maximum Subsequence

带取模不好处理,只能暴力尝试,考虑双向搜。同时若 $x+y\ge m$ 则其一定不如只选 $x$ 或 $y$ 中较大者。

F Connecting Vertices

线段不交意味着区间 DP。对于枚举区间考虑是否存在边 $(l,r)$,若存在则可以枚举两个连通块,否则即为多个类似上面的东西的连接。两种情况分别用 $f,g$ 互转即可不重。

G Xor-MST

考虑常规的 MST 求法 Kruskal 和 Prim 都无法应对完全图的情况,此时可以 Boruvka,其本质思想是在不超过 $\log$ 次过程中,每个连通块找到向外的最小边,并合并。对于本题,可以使用 trie 找到异或最小的结果,常数略大。另外有一种做法为直接在 tire 上,考虑某个子树的 MST 一定最多只有一条跨越子树的边。

Edu 20

A. Maximal Binary Matrix

按照顺序检查每个位置可不可以插入 $1$,如果可以就一定插入。

B. Distances to Zero

使用 set 记录每个 $0$ 的位置,对每个下标找前驱后继。

C. Maximal GCD

考虑将序列除以 $\gcd$,得到的应该是 $1,2,3,\cdots,k-1,x$,枚举 $\gcd$ 判断能否构造。

D. Magazine Ad

注意到被分隔符分开的部分相当于多个单词。二分答案,从前往后扫,贪心的加入即可。

E. Roma and Poker

$f_{i,j}$ 表示到第 $i$ 局赢了 $j$ 是否可能。最后顺着 $f$ 逆推回去。

F. Coprime Subsequences

考虑容斥,$f_i$ 表示 $\gcd$ 为 $i$ 的子序列数量。先得到 $g_i$ 表示 $i\mid \gcd$ 的子序列数量,再狄利克雷差分回去得到 $f$。

G. Periodic RMQ Problem

区间复制持久化平衡树非常好写,但是会 MLE。考虑离线离散化,对每个小区间求一遍在 $a$ 中的最小值后,问题就是普通的动态 $rmq$。

Edu 19

A. k-Factorization

分解质因数,若有多余就乘起来。

B. Odd sum

记 $f_{i,0/1}$ 表示考虑到第 $i$ 个数的奇/偶子序列的和的最大值。

C. Minimal string

相当于单栈排序,只有栈头的数不大于接下来加入到栈的任何数,才会弹出。

D. Broken BST

同样的对于每一个节点有一个区间,表示若输入值属于这个区间,则可以到达这个点。

E. Array Queries

根号分治,$k\le \sqrt{n}$ 则预处理,否则暴力跳。

F. Mice and Holes

注意到每个洞容纳的老鼠是一段连续的区间,对这个区间 DP 即可。

Edu 16

A. King Moves

分三种情况讨论。

B. Optimal Point on a Line

排序后一定在序列中间偏左。

C. Magic Odd Square

奇数的形状是一个斜着的正方形。

D. Two Arithmetic Progressions

exgcd 找到第一个数,下一个数就是这个数加上 $\lcm$。

E. Generate a String

考虑什么时候可能由 $x+1$ 转移来,只有当 $x$ 为奇数时,可能存在 $\frac{x+1}{2}\to x+1\to x$。

F. String Set Queries

AC 自动机经典题。二进制分组建出 $\log$ 组自动机,插入最小的,容量达到上限就和上一个合并。

Theme Jasmine by Kent Liao