【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 的垃圾桶

懒得写了

posted @ 2026-03-05 13:49  L-Coding  阅读(0)  评论(0)    收藏  举报