2024 National Invitational of CCPC (Zhengzhou), 2024 CCPC Henan Provincial Collegiate Programming Contest
F 优秀字符串
签到,速杀。
J 排列与合数
其实也是签到。
全奇数情况的答案样例给了,含偶数的情况把偶数放最后即可。
因为细节挂了两发罚时。
H 随机栈
把所有 排序就是唯一的合法取出序列 。
然后我们模拟:
-
当 时,
cnt[a[i]]++
。 -
当 时,考虑 中待取那个数的
cnt
。为 则答案为 ;否则答案乘上 。
时间复杂度 ,桶排并预处理逆元可以 。
M 有效算法
二分合法的 即可,时间复杂度 。
A Once In My Life
构造 ,后面预留 digit(n)
位使这个数 即可,时间复杂度 。
B 扫雷 1
签到题,对价格取个后缀 即可,萌萌队友读错题写了半天。
L Toxel 与 PCPC II
诈骗题,因为 增长很快,所以每轮清扫的 bug
数至多二十来个,暴力 DP 即可,时间复杂度 。
K 树上问题
很板的换根 DP,每次换根不合法边数至多改变 ,不合法边数为 的点就是答案,时间复杂度 。
D 距离之比
容易注意到,两点在坐标系上确定的矩形越正,两点间贡献就越大。
换句话说,两点在坐标系上连线斜率越靠近 ,贡献越大。
考虑把坐标轴顺/逆时针旋转 度,则横坐标相邻的点对才会产生贡献,两种贡献取 max
就是答案。
简单解几知识:旋转后坐标变为 ,故直接对 排序即可,时间复杂度为 。
C 中二病也要打比赛
首先,左右端点数相同的子段最后一定会被推平成同一个数,我们把它看作“一个块”,相互接壤的块可以合并为一个新的块。
记录每个数最后出现的位置,容易实现上面的操作。
考虑每个块,如果把这个块推平成块内有的数,答案是块内不同数个数 ,否则就是不同数个数。
为了代价最小,每个块只能推成块内有的数。
反正块连续,不妨把每个块看成一个数,问题就变成:序列每个位置可以填若干种数,求序列最长上升子序列。(一个数只可能出现在一个块内)
然后就是众所周知的导弹拦截了,时间复杂度 。
G 扫雷 2
唯一真史。
我最开始的想法是最外边一圈很复杂,考虑设法把它围起来。
又注意到 字形能非常完美地避免 的出现,于是得到了 的构造方案雏形:
我们在左上角留一个 形,然后一路绕最外圈走,头部留出一个 字形,在拐角处特殊处理一下即可。
但在 时,如果头走到靠近左下角, 字形中一格可能与 形最下面的格子构成一个 ,需要特判。
对于 ,我们先用 个雷构造下面的图形:
潦草的像素图
* *
**********
* *
* *
**********
记 ,对 的雷,我们放在上面空的那行,剩下的在下面一行一行排下去就好。
时间复杂度 。
I 378QAQ 和字符串
首先,我们暴力枚举 。
改后串 如果有周期 ,就有周期 ,所以只需要枚举 。
串 有周期 ,则 ,只需要这两个串失配次数不超过 即可。
怎么快速找到失配位置呢?只需要快速找到两串 即可。
这两个串都是 的子串,匹配一段后剩下的也是 的子串,所以我们可以对 求 SA,利用 ST 表即可 在每次失配后求两串剩余部分 。
然后是选择把每个同余类推平成哪个字母,因为枚举的 ,每个同余类大小至多为 ,暴力即可。
时间复杂度为 ,用 SA-IS + 状压 RMQ 可以优化到 。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!