01.22 ARC170 题解慢报

补完了,来发题解慢报。AB 就不写了。

C Prefix Mex Sequence

考虑 DP,\(f(i,j)\) 表示前 \(i\) 个数,填了 \(j\) 个不同的数。如果 \(s_{i+1}=1\) 那么这位唯一确定,只需要保证 \(j<m\) 即可转移到 \(f(i+1,j+1)\);如果 \(s_{i+1}=0\) 那么可以选旧的数也可以选新的数,分别转移即可。

D Triangle Card Game

这场的 D 和 F 一个德行。都是难度不高但是很恶心的题。

考虑枚举 Alice 选择的数。对于选择的 \(a_i\),Bob 可以赢当且仅当存在一个 \(b_j\) 使得不存在 \(a_k (j\neq i)\) 使得 \(a_i+a_k<b_j\)\(a_i-b_j<a_k\)\(a_k-b_i<a_i\)。分情况讨论:对于 \(b_j<a_i\) 的,实际上取 \(j=1\) 一定最优,直接判即可;对于 \(b_j>a_i\) 的,实际上就是要求出对于 \(k\neq i\)\(|a_k-b_j|\) 的最小值。预处理时前后扫两遍,记录最小和次小即可。

E BDFS

考虑如下序列:每次出栈的时候记录其是从左边过来的还是右边过来的。如果序列相邻元素不同那么概率为 \(1-p\) 否则为 \(p\)。记两个的数量分别为 \(x,y\),那么贡献为 \(x(x+1)/2+y(y+1)/2\),考虑平方的组合意义后直接 DP 然后矩阵快速幂即可。

F Edge Deletion

考虑直接贪心模拟。我们对于一个点上,可以动态地打一个 tag \(t\) 表示“这个点的最小邻居是谁尚未确定,但是最小邻居的赋权为 \(t\)”,并在一个点可以确定的时候进行删边和删 tag。然后每次到一个点,首先判能否为 \(0\):即要么其为孤立点,要么其度数为一且邻居点上还有 tag。然后有三种取值情况:取邻居的确定的点,取和其隔着一个点的 tag(也就是给跨国的那个点确定值为 \(t\)),或者新取一个值。第一种情况需要满足这个邻居没有 tag 或者度数 \(>1\),第二种情况需要满足这个邻居没有 tag 或者度数 \(>2\),第三种情况就直接打 tag。为了处理第二种情况,我们需要维护集合 \(S\) 表示其邻居的所有 tag,这是容易维护的。

其实画画图就很明了了。就是有若干细节。

posted @ 2024-01-23 10:42  LarsWerner  阅读(14)  评论(0编辑  收藏  举报