【3 月小记】Part 3: 省选前杂题选讲、线段树二分专题
省选前杂题选讲
P2625 豪华游轮
首先发现,不需要转动的角度,可以放在所有的位移都走完之后再转。可以知道,只有部分的角度是有用的。
尝试猜一些角度有用的充要条件。发现可以先让船向前(即正北方向)一直走,然后尽可能转 \(180^{\circ}\),再向后走(转身后向后走,等价于向前走)。
考虑把转动操作放到最开始,这样其实是无用的。因为方向是相对的,你最开始转这个角度,就导致你后续转身的时候,必须转上这个角度的相反角度,即抵消这个角度,等价于没转,所以没用。
考虑把每个角度泛化为物品,构造一个背包,尽可能用少的物品数量凑出 \(180^{\circ}\)。
最后,两边一夹角,余弦定理解三角形即可求出距离。
P10184 [YDOI R1] whk
可以发现“有趣的天数”的合法性是单调的,考虑二分。
假设当前二分的值是 \(x\),那么这 \(x\) 天必须至少写 \(xt\) 个科目的题目。
对于一种科目,最多写 \(x\) 天;如果不够,则最多写 \(a_i\) 天,故最多写 \(\min(x, a_i)\) 天。
对于 \(n\) 种科目,最多写 \(D = \sum_{i=1}^n \min(x, a_i)\) 天。
因此,对于一个答案 \(x\),只需判断是否 \(d \ge xt\) 即可判断它是否合法。
P3582 [POI 2015 R1] 影迷 Movie-goer
题意:给定一个序列,求最大子段和,但是子段内的重复元素不算贡献。
最大子段和显然能用线段树维护。考虑怎么把重复元素解决掉。
我们从 \(1\) 到 \(n\) 遍历。当遍历到的位置 \(i\) 满足其与之前的某个位置 \(j\) 构成关系 \(f_i = f_j\),即元素重复,可以考虑将 \(i\) 位置的贡献不变,将 \(j\) 位置的贡献取其相反数。这保证了,如果选择的子段包含了 \(i\) 与 \(j\) 这两个位置,则可以使它们两者相互抵消,变成 \(0\) 的贡献。
如果 \(j\) 之前仍有位置 \(k\) 与其重复,直接将 \(k\) 位置(以及 \(k\) 之前仍与其重复的位置)的贡献置为 \(0\),保证算非法子段的时候,能抵消成 \(0\) 的贡献。
边遍历,边线段树查询,取最大值即可。
P3758 [TJOI2017] 可乐
\(i \to i\) 的自环代表待在原地不动。
\(n+1\) 为一虚拟节点,代表自爆。仅有边连向它,但没有边连出。有点类似网络流的汇点。
\(n+1 \to n+1\) 的自环代表自爆之后不会有任何走动。这需要注意。
容易想到定义 \(dp_{u,j}\) 表示走到 \(u\) 节点,走了 \(j\) 步的方案数。转移是容易的。
注意到,如果用邻接矩阵 \(G\) 存图,那么 \(G^p(u, v)\) 的意义就是:在图上从 \(u\) 点走到 \(v\) 点,恰好经过 \(p\) 步的方案总数。
为什么呢?因为,你考虑,你做一次矩阵乘法,它的步骤和 Floyd 算法是完全一样的,所以这就是答案了
P11217 【MX-S4-T1】「yyOI R2」youyou 的垃圾桶
懒得写了

浙公网安备 33010602011771号