专题题解 - JOI 2018 Final

也较简单的养老场,纯粹当做把这几个题补上来打的。


A. ストーブ

难度:$\bigstar$

题目大意:

给定 $n$ 个递增的数 $T_1,\ldots,T_n$,你需要选择至多 $k$ 个区间使得它们的并包含所有 $[T_i,T_i+1]$,求区间长度和的最小值。

$1\leq n\leq 10^5$

题目解法:

先选所有 $[T_i,T_i+1]$,如果 $n>k$ 则再按照 $T_i-T_{i-1}$ 排序合并一些区间。

时间复杂度为 $O(n\log n)$。


B. 美術展

难度:$\bigstar$

题目大意:

有 $n$ 个美术品,每个美术品有价值 $B_i$ 和尺寸 $A_i$,你需要选择一个美术品的集合 $S$ 使得其中价值之和减去尺寸极差最大。

$2\leq n\leq 5\times 10^5$

题目解法:

将美术品按照 $A$ 排序,设 $C_i=\sum\limits_{j\leq i} B_j-A_i, D_i=A_i-\sum\limits_{j<i}B_j$,那么我们就是要选择 $l\leq r$ 使得 $C_r+D_l$ 最大,直接做即可。

时间复杂度为 $O(n\log n)$。


C. 団子職人

难度:$\bigstar\bigstar$

题目大意:

给定 $n\times m$ 的由 $\texttt{R,G,W}$ 构成的矩阵,你每次可以取走从上到下连续或从左到右连续且分别为 $\texttt{R,G,W}$ 的三个元素,一个位置不能重复取,求最多能取几次。

$1\leq n,m\leq 3000$

题目解法:

将贡献都算在中间的 $\texttt{G}$ 上,我们预处理每个 $\texttt{G}$ 上下和左右分别是否符合可以取的条件。

我们发现,两个可以取的三元组不能同时取,仅当它们对应的两个 $\texttt{G}$ 是在同一条平行副对角线的直线上,所以对每个这样的直线 DP,再把结果相加即可。

时间复杂度为 $O(nm)$。


D. 定期券

难度:$\bigstar\bigstar$

题目大意:

给定 $n$ 个点 $m$ 条边的边带权无向图和其中四个点 $s,t,u,v$,你可以选择一条 $s\to t$ 的带权最短路,把其上所有边权改为 $0$,求修改后 $u\to v$ 带权最短路的最小值。

$2\leq n\leq 10^5, 1\leq m\leq 2\times 10^5$

题目解法:

求出 $s$ 出发的最短路 DAG,我们可以选择这个 DAG 上一条 $s\to t$ 的路径将边权改为 $0$。

考虑新图中 $u\to v$ 的最短路,一种情况是没有经过边权改为 $0$ 的边,也就是说等于原图中 $u\to v$ 的最短路;另一种情况是经过了边权改为 $0$ 的边,那么显然经过的边权为 $0$ 的边在 $u\to v$ 最短路以及 $s\to t$ 最短路上都是连续一段,我们只要知道段端点就可以确定答案。

而这可以在 DAG 上拓扑排序 DP 得到,对于点 $a,b$,如果在 DAG 上 $a\to b\to t$ 可达,那么 $dis(u,a)+dis(v,b)$ 和 $dis(v,a)+dis(u,b)$ 就是候选答案。

时间复杂度为 $O(m\log n)$。


E. 毒蛇の脱走

难度:$\bigstar\bigstar$

题目大意:

给定 $n$ 和序列 $a_0,\ldots,a_{2^n-1}$,还有 $q$ 次询问,每次给定包含 $0,1,\texttt{?}$ 的字符串 $S$,问将 $S$ 中的 $\texttt{?}$ 换成 $0,1$ 中的任何一个,将其看作二进制数 $x$,对所有可能的结果对应的 $a_x$ 求和。

$1\leq n\leq 20, 1\leq q\leq 10^6$

题目解法:

这题目太老了,见过好多次。

设 $S$ 中 $0,1,\texttt{?}$ 的个数分别为 $a,b,c$。

算法一:暴力将每个 $\texttt{?}$ 换成 $0$ 或 $1$ 求和,时间复杂度 $O(2^c)$。

算法二:对 $0$ 容斥,也就是写成 $s(0)=s(\texttt{?})-s(1)$ 的形式,将每个 $0$ 换成 $\texttt{?}$ 和 $1$,而对于只有 $\texttt{?}$ 和 $1$ 的情况可以直接预处理高维后缀和后计算,时间复杂度 $O(2^a)$。

算法三:对 $1$ 容斥,过程同上,用高维前缀和计算,时间复杂度 $O(2^b)$。

选取最优的算法,单次询问时间复杂度 $O(\min(2^a,2^b,2^c))$,而由于 $a+b+c=n$ 所以我们有 $\min(a,b,c)\leq \dfrac{n}{3}$,加上高维前后缀和的复杂度,总的时间复杂度为 $O(q2^{\frac{n}{3}}+n\times 2^n)$。

Bonus:https://www.luogu.com.cn/problem/P6562