Solution Set - 杭电多校 2022 Day3 一句话题解

A:设 \(f_i\) 表示从 \(i\) 升级到 \(i+1\) 的期望花费,\(sw_i\)\(w_i\) 的前缀和,\(sf_i\)\(f_i\) 的前缀和,有 DP 式子:

\[\begin{aligned} f_i& =c_i+\frac{1-p_i}{sw_i}\sum^i_{j=1}w_j\sum^i_{k=i-j} f_i\\ f_i& =c_i+\frac{1-p_i}{sw_i}\sum^i_{j=1}w_j(sf_{i-1}-sf_{i-j-1}+f_i)\\ f_i& =c_i+sf_{i-1}(1-p_i)+f_i(1-p_i)-\frac{1-p_i}{sw_i}\sum^i_{j=1}w_jsf_{i-j-1}\\ p_if_i& =c_i+sf_{i-1}(1-p_i)-\frac{1-p_i}{sw_i}\sum^i_{j=1}w_jsf_{i-j-1} \end{aligned} \]

后面是一个显然的分治 NTT 形式,直接做就行了,时间复杂度 \(O(n\log^2 n)\)

B:感觉自己很愚昧嗷。二分 boss 被杀死的时间,使用状压 DP 计算伤害即可,时间复杂度 \(O(2^n\log 2\times 10^7)\)

C:SMWY,SBT。

E:考虑拆边,模拟 Kruskal 的过程,我们钦点全部的首先取较大的边权,并拆边为 \(\{u,v,a,0/1\}\)\(\{u,v,b,0/-1\}\),后一个权值表示加入这条边对选择 \(k\) 的个数的影响。

对边进行排序,按权值从小到大,权值相同的优先考虑 \(1/-1\) 排序。

考虑状压 DP,设 \(f_{i,S,j}\) 表示目前在第 \(i\) 条边,考虑第 \(i\) 条边选或者不选,当前连通性的最小表示为 \(S\),目前用了 \(j\)\(a\),考虑选与不选合并连通性的情况,可以的到 DP 式。

F:果然几何结论不熟悉就很蠢,注意到随机情况下的二维凸包是 \(O(\log n)\),建立线段树维护区间凸包,向上合并的时候归并排序求凸包。

询问的时候,先求出凸包然后最小圆覆盖即可,时间复杂度 \(O(q\log^2 n)\)

I:排序后贪心。

J:设 \(f_{i,j}\) 表示从 \(i\) 出发只经过 \([l_j,r_j]\) 之间的边能否到达 \(v_j\),最后只需要求出 \(f_{u_j,j}\) 即可。

考虑怎么求这个,建出反向的 DAG,对于一条边 \(u\to v\),需要更新 \(f_v\to f_u\land S\),考虑如何求出这个 \(S\),分块预处理即可。

K:分四个方向讨论即可。

L:随便 DP 就行了。

posted @ 2022-07-30 20:30  时一月  阅读(43)  评论(0)    收藏  举报