Codeforces Round 919 (Div. 2)

A

一笔带过,维护可能的最大值和最小值,并对于 3 操作特殊维护一下即可。

B

枚举第一个人删多少个数(贪心的想,一定删最大的几个,因为假如留着一定会对第二个人有利)

第二个人一定是翻的越多越好,且翻的都是最大的几个数。

使用前缀和容易计算答案。

C

妙妙题。

枚举 \(k\),接着发现 \(a_i \equiv a_{i+k} \pmod m\) 等价于 \(m\)\(|a_i-a_{i+k}|\) 整除。

\(m\) 的最大值明显是 \(\gcd(|a_i-a_{i+k}|)\)

答案为 \(\sum_{k}[m \geq 2]\)

D

被诈骗了好久,结束前 12min 刚刚干掉的。

发现 \(\lceil \log_{2}10^{18} \rceil=60\)

所以 \(60\) 次 2 操作以后的操作都是无效的。

你可能觉得那不排除无效操作后直接暴力嘛!不过万一 1 操作很多很多呢?

我们记录每一个 2 操作到上一个 2 操作的所有 1 操作,每次跳是跳 2 操作,而不是一个一个跳 1 操作。

容易实现,细节需要稍稍注意。

E

1 其实将整个序列分段,所以单个串的好的子串个数是容易求得的。

考虑一个 dp,\(f_{i,j}\) 表示还剩 \(i\) 的好的子串个数需要达成,上一个分段长度为 \(j\) 的方案数。

转移不难,但是直接转移是 \(O(n^3)\) 的,无法接受。

我搜了一发状态数,发现貌似很低,所以写了个记搜就过了,有没有大神给个解释。

F1

萌萌暴力题。

一条路径包围岛屿定义为,不存在一条从岛屿出发的八连通路径可以在不触及路径的前提下到达边界。

首先明显的二分答案,标记 \((x,y)\) 通过四联通能到达的“距离火山距离小于等于 \(\text{mid}\) ”的点。

再以岛屿所有点为起点做 bfs,看看能不能不触及路径的前提下到达边界。如果能,那就表示路径上所有点距离火山距离小于等于 \(\text{mid}\) 的一条包围岛屿的路径是不存在的。

记得提前多源 bfs 出每个点到最近火山的距离,另外,本题大量使用多源 bfs,建议模块化一点。

F2

一眼整体二分,但是比赛还剩下 10min,所以没写。

posted @ 2024-02-02 22:44  luogu_gza  阅读(34)  评论(0)    收藏  举报