2024 National Invitational of CCPC (Zhengzhou), 2024 CCPC Henan Provincial Collegiate Programming Contest

F 优秀字符串

签到,速杀。

J 排列与合数

其实也是签到。

全奇数情况的答案样例给了,含偶数的情况把偶数放最后即可。

因为细节挂了两发罚时。

H 随机栈

把所有 0ain 排序就是唯一的合法取出序列 b

然后我们模拟:

  1. 0ain 时,cnt[a[i]]++

  2. ai=1 时,考虑 b 中待取那个数的 cnt。为 0 则答案为 0;否则答案乘上 cnt

时间复杂度 O(nlogn),桶排并预处理逆元可以 O(n)

M 有效算法

二分合法的 k 即可,时间复杂度 O(nlogn)

A Once In My Life

构造 123456789d,后面预留 digit(n) 位使这个数 0(modn) 即可,时间复杂度 O(Tlogn)

B 扫雷 1

签到题,对价格取个后缀 min 即可,萌萌队友读错题写了半天。

L Toxel 与 PCPC II

诈骗题,因为 x4 增长很快,所以每轮清扫的 bug 数至多二十来个,暴力 DP 即可,时间复杂度 O(nn4)

K 树上问题

很板的换根 DP,每次换根不合法边数至多改变 1,不合法边数为 0 的点就是答案,时间复杂度 O(n)

D 距离之比

容易注意到,两点在坐标系上确定的矩形越正,两点间贡献就越大。

换句话说,两点在坐标系上连线斜率越靠近 1/1,贡献越大。

考虑把坐标轴顺/逆时针旋转 45 度,则横坐标相邻的点对才会产生贡献,两种贡献取 max 就是答案。

简单解几知识:旋转后坐标变为 12(x±y),故直接对 x±y 排序即可,时间复杂度为 O(logn)

C 中二病也要打比赛

首先,左右端点数相同的子段最后一定会被推平成同一个数,我们把它看作“一个块”,相互接壤的块可以合并为一个新的块。

记录每个数最后出现的位置,容易实现上面的操作。

考虑每个块,如果把这个块推平成块内有的数,答案是块内不同数个数 1,否则就是不同数个数。

为了代价最小,每个块只能推成块内有的数。

反正块连续,不妨把每个块看成一个数,问题就变成:序列每个位置可以填若干种数,求序列最长上升子序列。(一个数只可能出现在一个块内)

然后就是众所周知的导弹拦截了,时间复杂度 O(nlogn)

G 扫雷 2

唯一真史。

我最开始的想法是最外边一圈很复杂,考虑设法把它围起来。

又注意到 T 字形能非常完美地避免 2 的出现,于是得到了 m4n4 的构造方案雏形:
我们在左上角留一个 Γ 形,然后一路绕最外圈走,头部留出一个 T 字形,在拐角处特殊处理一下即可。

但在 n=5 时,如果头走到靠近左下角,T 字形中一格可能与 Γ 形最下面的格子构成一个 2,需要特判。

对于 m>4n4,我们先用 4n4 个雷构造下面的图形:

潦草的像素图
*        *
**********
*        *
*        *
**********

x=m(4n4),对 x(mod(n2)) 的雷,我们放在上面空的那行,剩下的在下面一行一行排下去就好。

时间复杂度 O(n2)

I 378QAQ 和字符串

首先,我们暴力枚举 p

改后串 s 如果有周期 p,就有周期 2p,所以只需要枚举 (n4,n2]

s 有周期 p,则 s[1...np]=s[p+1...n],只需要这两个串失配次数不超过 k 即可。

怎么快速找到失配位置呢?只需要快速找到两串 lcp 即可。

这两个串都是 s 的子串,匹配一段后剩下的也是 s 的子串,所以我们可以对 s 求 SA,利用 ST 表即可 O(1) 在每次失配后求两串剩余部分 lcp

然后是选择把每个同余类推平成哪个字母,因为枚举的 p(n4,n2],每个同余类大小至多为 4,暴力即可。

时间复杂度为 O(nlogn+nk),用 SA-IS + 状压 RMQ 可以优化到 O(nk)

posted @   jzcrq  阅读(35)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示