0%

ARC104 简要题解

A,B 的题解被梓喵二号吃了,只剩下了提交记录。

C - Fair Elevator

我们发现,对于时间的区间 \([l,r](r-l+1\equiv 0\pmod 2)\),如果没有人的区间跨过 \(l\),则 \([l,r]\) 中的上下情况一定是第 \(1\) 个人为 \([l,\dfrac{l+r}{2}+1]\),第 \(2\) 个人为 \([l+1,\dfrac{l+r}{2}+2]\)\(\dots\),最后一个人为 \([\dfrac{l+r}{2},r]\)。所以合法状态一定会被划分成若干个这样的区间。

所以我们可以设计一个 dp,\(f[i]\) 表示时间前缀 \([1,i]\) 是否有解,转移枚举最后一个这样的区间,然后 check 这样的区间是否有解。check 只需要枚举每个应作为左端点的位置看其对应的右端点是否被占用;右端点也要类似的看左端点是否被占用。可以证明这是充要条件。复杂度 \(O(n^3)\)

D - Multiset Mean

简单推式子 \[ \begin{aligned} &\frac{\sum\limits_{i=1}^nia_i}{\sum\limits_{i=1}^na_i}=x\\ \Leftrightarrow&\sum\limits_{i=1}^n(i-x)a_i=0\\ \Leftrightarrow&\sum\limits_{i=1}^{n-x}ia_{x+i}=\sum\limits_{i=1}^{x-1}ia_{x-i} \end{aligned} \] 注意到这等价于两个长度分别为 \(n-x\)\(x-1\) 的序列之和相等,所以我们可以设 \(f(i,j)\) 表示前 \(i\) 个数,\(\sum\limits_{k=1}^ika_k=j\) 的方案数。则转移枚举 \(a_i\),发现 \(a_i\) 相差为 \(1\) 的两项可以快速优化,所以转移可以优化到 \(O(1)\)。求答案则枚举 \(j\),方案数为 \((k+1)f(x-1,j)f(n-x,j)\)\(a_x\) 可以随便填)。总复杂度 \(O(n^4)\)(默认 \(n,k\) 同阶)。

由于这个背包的能对答案产生影响的容量远远达不到 \(n^3\),大约只有 \(300000\),所以赛时写了个 \(n^5\) 的暴力卡卡常也过了。

E - Random LIS

发现 \(n\) 很小而 \(A_i\) 很大,所以我们枚举元素之间的相对顺序,然后再计算满足这个相对顺序的序列的数量。

我们发现对二元组 \((a_i,i)\) 排序(第一关键字升序,第二关键字降序)所得结果唯一,所以我们考虑枚举二元组的顺序。

\(p_i\) 为对二元组排序后第 \(i\) 位是原本第几个元素,我们发现如果连续的两个数之间有 \(p_i<p_{i+1}\),则 \(a_{p_i}<a_{p_i+1}\),反之 \(a_{p_i}\leqslant a_{p_i+1}\)。注意到我们可以把 \(<\) 转化为 \(\leqslant\),只需要强制让后面的元素全部 \(+1\),也就是让后面的 \(A_i\) 全部减小 \(1\)

现在我们只需要统计 \(\forall i,a_i\leqslant A'_i\)(这里用了 \(A'\) 因为限制可能会减小) 的不下降序列数量,这等价于在平面直角坐标系中,从 \((1,1)\) 走到 \((n+1,\infty)\),每一步只能向右或向上,且每个横坐标有一个高度限制 \(A'_i\) 的方案数。这个我们可以通过容斥枚举第一次走出限制所在的横坐标求解。

F - Visibility Sequence

为了防止记重,对于一个可能的序列 \(P\),我们让其可能的 \(H\) 中的每个元素尽可能小。

我们可以发现,如果添加一个 \(H_0=\infty\),对每个 \(i\),令其向 \(P_i\) 连边,则形成了一棵以 \(0\) 为根的树。同时我们可以发现,该树中的任何一棵子树一定对应原序列的一个区间(证明可以考虑反证)。

这样,对于一个点 \(i\),一定有 \(H_i<H_{fa_i}\),对于子树中的任意一点 \(v\),有 \(H_i>H_v\),对于所有编号比其小的兄弟节点 \(w\),一定有 \(H_i\geqslant H_w\)。注意到我们保证让 \(H\) 尽可能小,所以最大的 \(H\) 不超过 \(n+1\)

由于都是区间,我们考虑区间 dp,设 \(f(l,r,x)\)\([l,r]\) 中的点形成了一棵以 \(l\) 为根的树,且 \(H_l=x\) 的方案数,转移我们考虑枚举最后一棵子树,并考虑其对原先的 \(H_l\) 的影响。则我们有: \[ f(l,r,x)=\sum\limits_{i=l+1}^rf(l,i-1,x)[X_i\geqslant x-1]\sum\limits_{y=1}^{x-2}f(i,r,y)+\sum\limits_{i=l+1}^rf(i,r,x-1)\sum\limits_{y=1}^{x}f(l,i-1,y) \] 我们考虑 \(H_i\),如果其比先前的 \(l\) 的最后一个儿子的 \(H\) 大,则需更新 \(l\)\(H\);反正由于保证其比上一个兄弟节点的 \(H\) 不小,所以要把其 \(H\) 增大为 \(x-1\),同时要保证 \(X_i\geqslant x-1\)

注意到转移可以前缀和优化,总复杂度 \(O(n^4)\)

提交记录:#17155557(A),#17160365(B),#17252100(C),#17171248(D,\(O(n^5)\)),#17254141(E),#17257201(F)。