2024 National Invitational of CCPC (Zhengzhou), 2024 CCPC Henan Provincial Collegiate Programming Contest
F 优秀字符串
签到,速杀。
J 排列与合数
其实也是签到。
全奇数情况的答案样例给了,含偶数的情况把偶数放最后即可。
因为细节挂了两发罚时。
H 随机栈
把所有 \(0 \leq a_i \leq n\) 排序就是唯一的合法取出序列 \(b\)。
然后我们模拟:
-
当 \(0 \leq a_i \leq n\) 时,
cnt[a[i]]++
。 -
当 \(a_i=-1\) 时,考虑 \(b\) 中待取那个数的
cnt
。为 \(0\) 则答案为 \(0\);否则答案乘上 \(\frac{cnt}{已取数的个数}\)。
时间复杂度 \(\mathcal{O}(n \log n)\),桶排并预处理逆元可以 \(\mathcal{O}(n)\)。
M 有效算法
二分合法的 \(k\) 即可,时间复杂度 \(\mathcal{O}(n \log n)\)。
A Once In My Life
构造 \(123456789d \cdots\),后面预留 digit(n)
位使这个数 \(\equiv 0 \pmod n\) 即可,时间复杂度 \(\mathcal{O}(T \log n)\)。
B 扫雷 1
签到题,对价格取个后缀 \(\min\) 即可,萌萌队友读错题写了半天。
L Toxel 与 PCPC II
诈骗题,因为 \(x^4\) 增长很快,所以每轮清扫的 bug
数至多二十来个,暴力 DP 即可,时间复杂度 \(\mathcal{O}(n\sqrt[4]{n})\)。
K 树上问题
很板的换根 DP,每次换根不合法边数至多改变 \(1\),不合法边数为 \(0\) 的点就是答案,时间复杂度 \(\mathcal{O}(n)\)。
D 距离之比
容易注意到,两点在坐标系上确定的矩形越正,两点间贡献就越大。
换句话说,两点在坐标系上连线斜率越靠近 \(1/-1\),贡献越大。
考虑把坐标轴顺/逆时针旋转 \(45\) 度,则横坐标相邻的点对才会产生贡献,两种贡献取 max
就是答案。
简单解几知识:旋转后坐标变为 \(\frac{1}{\sqrt{2}}(x \pm y)\),故直接对 \(x \pm y\) 排序即可,时间复杂度为 \(\mathcal{O}(\log n)\)。
C 中二病也要打比赛
首先,左右端点数相同的子段最后一定会被推平成同一个数,我们把它看作“一个块”,相互接壤的块可以合并为一个新的块。
记录每个数最后出现的位置,容易实现上面的操作。
考虑每个块,如果把这个块推平成块内有的数,答案是块内不同数个数 \(-1\),否则就是不同数个数。
为了代价最小,每个块只能推成块内有的数。
反正块连续,不妨把每个块看成一个数,问题就变成:序列每个位置可以填若干种数,求序列最长上升子序列。(一个数只可能出现在一个块内)
然后就是众所周知的导弹拦截了,时间复杂度 \(\mathcal{O}(n \log n)\)。
G 扫雷 2
唯一真史。
我最开始的想法是最外边一圈很复杂,考虑设法把它围起来。
又注意到 \(T\) 字形能非常完美地避免 \(2\) 的出现,于是得到了 \(m \leq 4n-4\) 的构造方案雏形:
我们在左上角留一个 \(\Gamma\) 形,然后一路绕最外圈走,头部留出一个 \(T\) 字形,在拐角处特殊处理一下即可。
但在 \(n=5\) 时,如果头走到靠近左下角,\(T\) 字形中一格可能与 \(\Gamma\) 形最下面的格子构成一个 \(2\),需要特判。
对于 \(m > 4n-4\),我们先用 \(4n-4\) 个雷构造下面的图形:
潦草的像素图
* *
**********
* *
* *
**********
记 \(x=m-(4n-4)\),对 \(x \pmod {(n-2)}\) 的雷,我们放在上面空的那行,剩下的在下面一行一行排下去就好。
时间复杂度 \(\mathcal{O}(n^2)\)。
I 378QAQ 和字符串
首先,我们暴力枚举 \(p\)。
改后串 \(s\) 如果有周期 \(p\),就有周期 \(2p\),所以只需要枚举 \(\left(\frac{n}{4},\frac{n}{2}\right]\)。
串 \(s\) 有周期 \(p\),则 \(s[1...n-p]=s[p+1...n]\),只需要这两个串失配次数不超过 \(k\) 即可。
怎么快速找到失配位置呢?只需要快速找到两串 \(lcp\) 即可。
这两个串都是 \(s\) 的子串,匹配一段后剩下的也是 \(s\) 的子串,所以我们可以对 \(s\) 求 SA,利用 ST 表即可 \(\mathcal{O}(1)\) 在每次失配后求两串剩余部分 \(lcp\)。
然后是选择把每个同余类推平成哪个字母,因为枚举的 \(p \in \left(\frac{n}{4},\frac{n}{2}\right]\),每个同余类大小至多为 \(4\),暴力即可。
时间复杂度为 \(\mathcal{O}(n \log n + nk)\),用 SA-IS + 状压 RMQ 可以优化到 \(\mathcal{O}(nk)\)。