*1600~1900 狂做

· · 个人记录

CF2124D *1700

猜测是找到第 k 小的数,然后大于它的都可以直接删掉。

如何证明?

对于一个数,在全局的排名为 rk,扩展一个端点,排名 +0+1,最终会扩到 rk。也就是说若 rk > k,一定会有一个区间它的排名为 k

然后和第 k 小的数相同的怎么处理呢,两边往中间扫看最多能留多少个,如果最后留的个数 \ge k - 1 就合法。

CF2123F *1700

首先发现如果一个子序列 \{x_i\} 有共同的大于 1 的因子,轮换一下就全满足题意了。

现在你发现所有合数都能和它的质因子这么轮换。

选什么质因子轮换呢?我是从小到大枚举质因子,选还没用过的质因子轮换。这个能过。

然后质因子用埃氏筛筛就行了。

思考为什么能过,不难发现 \le \lfloor \displaystyle \frac{n}{2} \rfloor 的质数都能参与轮换,> \displaystyle \lfloor \frac{n}{2} \rfloor 都不能参与轮换,这种情况直接把每个数和最大质因子轮换即可。

CF2121G *1900

\max(x,y) = \displaystyle \frac{x + y + \lvert x - y \rvert}{2}

前者是 \sum\limits_{i = 1}^n i\cdot(n-i+1)

后者的话,设 0 个数的前缀和为 f_i,答案是 2f_r - r - (2f_{l-1} - (l - 1))

CF2121F *1800

感觉这个评高了。

所有大于 x 的位置像墙一样隔开。

墙内枚举右端点前缀和即可。

有个另解的 trick:对于每一个点 i,找到左边第一个比 a_i 大/小 的位置 l 和右边第一个比 a_i 大/小 的位置 r,则 \sum \min(i - l , r - i) 数量级为 n\log n。证明参考笛卡尔树上启发式合并。

CF2120D *1800

沟槽鸽巢原理啊。

首先要保证行最短,那肯定是一定存在一列有 a 个某一个数。

根据鸽巢原理得到答案为 k(a-1) + 1

然后算列有多少种本质不同的种类数,本质不同指出现 a 次的位置不同且值不同,位置不同为 n \choose a,不同值为 k,所以乘起来就是本质不同种类数。

所以 n = k(a - 1) + 1m = k {n\choose a}(b - 1) + 1

CF2117G *1900

找到一条 1\to n 的路径(不要求是简单路径),最小化边最大值和最小值的和。

看起来无从下手,但你发现如果是最小化最大值的话会做,就是直接建最小生成树就行了。

这时候发现你可以在定最大值的时候去找更小的最小值再走回来,或者选一个稍微更大的最大值再找一个超级小的最小值,这个在以 1 为根的生成树上 dp 即可。

CF2117F *1800

首先发现叶节点最多只能有两个。

也就是说最多有一个点有两个孩子,其他都是一个孩子。

然后这棵树的形态其实就定死了,否则答案为 0

找到有两个孩子的点孩子的两条链的深度即可算下面的方案数,然后和上面的方案数乘起来即可。

CF2117E *1600

敏锐地发现这就是两个波浪形就做完了。