Kevin090228🍬's blog

Blogs

联合省选 2026 Writeup

2026-03-10 15:05:16 By Kevin5307

recollector

$f_{i,j}$ 表示 $i$ 的子树中重链高度为 $j$ 的概率,转移的时候首先合并出 $F=\prod_{j\in son_i} f_j$,然后对于每个儿子暴力计算多项式除法,暴力枚举该儿子的重链长度和其他儿子的重链长度和转移。

时间复杂度 $O(n^2)$。

string

用状态 $(i,j,k,0/1)$ 表示当前串匹配模式串 $s$ 的长度,当前比 $s$ 小的子串数量,严格比 $s$ 小的前缀数量,和是否已经包含 $s$ 作为子串。转移的时候枚举下一个填的字符,在 kmp 上预处理之后就可以 $O(1)$ 转移。

显然 $j\geq \binom{k}{2}$,所以 $k$ 只会转移到 $O(\sqrt m)$ 级别。时间复杂度 $O(nm^{1.5})$。

night

再说。

perm

首先二分出 $0$ 的位置,然后询问所有包含 $0$ 的前后缀的答案。然后考虑 checker 的写法,不断找到两边 mex 增加的地方中 mex 较小的那个,可得到上一次的 mex 到当前的 mex 的数在某个区间中。这些限制是充要的,构造方案很简单。

把二分改成不断询问某个后缀直到答案是 $0$,这些询问的后缀(除了最后一个)都是在之后要用到的,所以可以把询问次数优化到 $n$ 次。

starmap

按照 $k\bmod 4$ 可以分别得到度数的奇偶性是否固定以及边数的奇偶性是否固定四种情况,容易求出最后的图要长成什么样子,然后将问题转化为所有点度数都是偶数,且边数是偶数的情况。

注意到对 $\{a,b\},\{b,c\},\{c,d\},\{a,d\}$ 和任意一个大小为 $k-2$ 的子集进行操作,可以得到一个四元环。我们先用四元环把所有连通块连起来,然后求欧拉路径。欧拉路径的长度一定是偶数,且每次可以用四元环把三条连着的边缩成一条边,可以在 $n^2+O(n)$ 步内解决问题。

在开始判断前对整张图进行 $O(n^2/k^2)$ 次随机操作可以把图几乎打乱成随机的,会大大减少操作次数,可以直接通过。或者可以通过每次处理一个点,直到 $n=k+2$,然后对 $\binom{k+2}{2}$ 次最终操作去重,得到严格 $\binom{n}{2}$ 的步数。

industry

首先对所有子树和子树补按照高度排序,用线段树哈希容易在 $O(n\log^2 n)$ 的时间复杂度内求出所有子树和子树补的排名。用直径中心作为树根可以只用求所有子树的排名(因为此时所有子树补的高度都高于所有子树),可以把这一部分优化成 $O(n\log n)$ 甚至线性,但没啥用。

对于 $o_x+o_y=1$ 的部分分,可以分别得到两边的单调性,主席树配合二分可以做到 $O(\log n)$ 单次询问。

写一个树上莫队即可通过,时间复杂度 $O(n^{1.5}\log n)$。单根号的做法再说。

写在陈馨扬 cts 夺冠的时刻

2025-12-12 19:54:39 By Kevin5307

一月徂暑,晚夏绚丽。此刻的南京,因为酷暑而变得不同寻常。即使是从小在南京长大的我,也不曾有如此炎热的记忆。

小青鱼训练中心家军们的内心,似有盛夏的骄阳一般火热。伴随着蝉鸣,大家都坐在电脑面前,期待这个属于我们的盛夏的果实。 人生是美梦与热望。三年前,我们一起坐在电脑前看着咋克在线上ioi的表现。 我问初二的辰欣杨“你想进ioi吗?” 他说:“想!” , “你就正常发挥。”师兄小青鱼在一遍鼓励着他。陈新养自信地点点头。

Little09,流逝的时间没有淡去我对你的记忆,你还记得几年前我第一次见到你的时候吗?我依旧记得,几年前,从我见到你吃使的那一刻,当你从机房中走出,转过你的头,你自己的使轻轻地洒在你横着的脸上,我知道,我倒了八辈子霉。接着,在几个月的相处后,你没有的木琴,你拉不出使的朋友,你的八岁小鸡,深深地印在了我的脑海之中。你是在我余生中时常梦见的似了的,横着的笋。笋横着,你是我见过最勾勾的笋,我永远不知道如何建立起你我之间的桥梁。所以,我只能等待一个绝佳的机会,到了现在,退役的来临,我突然醒悟:我应该把你炖了,创造并抓住这个机会,而不是单纯地等待。

这些天,和朋友、室友、同学的分离,我依旧无法相信,挥手后的这个事实。这些熟悉的面孔,很快将会从我的人生中逝去,成为一段记忆。我明天就要离开这所学校了。你将向更远的地方飞去,去追逐你的未来,去实现你的梦想。也许,如果没有幸运和巧合,我们将不会再次见面。今晚,闲逛,期望不会和你见面。不过,你的突然出现,一定会让我一整天拉不出使。

真的伟大啊乐零,昨天晚上想乐零想到哭了,然后迷迷糊糊睡着了,梦里面梦到乐零拿了十个ioi金牌,历史最佳oier再也没有争议。然后就笑醒了,特别开心 。一个月所有的工资爸妈都不给全部买乐零的周边,乐零的讲题每场必看,特别喜欢乐零的动作,太帅了。以后等乐零年纪老大了我就飞去十一学校照顾乐零,当乐零的奴隶,等乐零年纪大去世了就跟着一起去,毕竟来到这个世界只为陪伴乐零,这个任务已经完成了,父母那边不管,没办法为了乐零已经尽力了,是这样的。这才是我这个合格的十一学生应该做的事情啊,所有的十一学生都应该像我这样,不然你们就不配叫是十一学生,不配喜欢小乐零!哦我不是十一学生,后面忘了

天赋,努力和执着完美的结合,这就是称心阳。

ZJOI 2015 Day 2 T1 黑客技术

2024-12-19 11:33:42 By Kevin5307

测试点 $1$

大概是用来让你感受这个奇怪语言的劲的。找到代码中奇怪的数就能拿到 $10$ 分。

一种可以拿到 $10$ 分的输入:

23333333

测试点 $2$

先运行一次,发现需要输入 $10$ 个整数。用你喜欢的方式在代码中找到 geti 片段。发现每次读入进来之后,如果 $ 1# 0 相等就输出 ok 否则输出 ko。于是我们不需要搞清楚代码的原理,只要修改一下代码,每次打印 # 0 然后复制粘贴即可。

注意代码中存在跳转行号,所以尽量不要一次插入多行输出行,不然可能会导致行号倒闭然后代码乱飞。

一种可以拿到 $10$ 分的输入:

7
47
1965
1915
-2551
-1646938625
-322
-167542220
4346926
1531256182

测试点 $3$

用你喜欢的方式在代码中找到 putc @ 111 片段,可以发现代码中总共有 $10$ 处输出 ok,按照 $1-3-3-3$ 的方式分布。运行一下可以发现,它让你输入 $20$ 个数,只要输入了就可以得到第一个 ok。事实上,如果你无脑打了 $20$ 个相同的整数,可以发现输出是 ok fail fail ok ok ok,也就是我们拿到了第四组限制的三分。

观察代码可以发现,后三组限制都是,判断某个量是否和预设量相等,如果是就输出三个 ok。通过打印中间变量,进行一些最基础的尝试可以发现,三个限制分别为:

  • $20$ 个数至少一个非 $0$。
  • $20$ 个数的和为 $0$。
  • $20$ 个数全部相等。

回想题面中描述的关于自然溢出的说明,可以想到,只需要输出 $20$ 个 $2^{30}$ 即可。

一种可以拿到 $10$ 分的输入:

1073741824
1073741824
1073741824
1073741824
1073741824
1073741824
1073741824
1073741824
1073741824
1073741824
1073741824
1073741824
1073741824
1073741824
1073741824
1073741824
1073741824
1073741824
1073741824
1073741824

测试点 $4$

尝试几次,根据输出的提示可以发现,读入的是一个字符串可以获得 $3$ 分,字符串长度恰好为 $18$ 可以再获得 $2$ 分。

依然是用你喜欢的方法找到 putc @ 111,发现在代码的末尾有一个可以输出 $5$ 个 ok 的地方。它的判断条件自然在它之前紧跟着它,可以找到第 $300$ 行开始的 $9$ 行一周期循环了 $18$ 次的相似代码块,在其中的判断语句中可以找到一些接近 $100$ 的数,大胆猜测它对应 ASCII 码。查阅题面的表格构造对应的输入即可。

一种可以拿到 $10$ 分的输入:

primaryschoolpupil

测试点 $5$

代码中出现了功能类似于对 $998244353$ 取模的片段。

测试一下可以发现它需要输入 $10$ 个字符串。在输出 ok 的语句之前可以找到十个判断,发现是判断某运算结果和大整数是否相等。猜测是字符串哈希,打印运算结果,尝试几次后可以发现 az 对应 $0$ 到 $25$,底为 $26$。

于是将判断中的 $10$ 个大整数按照 $26$ 进制分解即可。

一种可以拿到 $10$ 分的输入:

z
x
l
r
p
vfk
lssb
driozw
bqqcgzg
sanuwq

测试点 $6$

代码和测试点 $5$ 几乎完全一致。进行尝试后可以发现在这份代码中底为 $31$。

直接进行 $31$ 进制分解可能会存在某一位 $\geq 26$ 的情况。于是暴力枚举和大整数模 $998244353$ 同余的数直到不存在这种情形即可。

一种可以拿到 $10$ 分的输入:

p
n
nxybfe
bchdeeu
bdaeyow
eimvdvj
cqtmtzr
dcshgqm
djgxcsu
hilgqu

测试点 $7$

尝试一下可以发现要输入 $10$ 个整数。代码的判断部分和前面两个测试点相似,打印中间变量后可以发现是在模 $998244353$ 意义下求出输入的逆元并进行比较。逆元运算是可逆的,求出参与比较的 $10$ 个整数的逆元即可。

一种可以拿到 $10$ 分的输入:

998244353
1
224032231
204247430
800006205
536388420
830137805
173645564
591950221
212467234

测试点 $8$

与第 $7$ 个测试点相似,同样是存在某个函数 $f(x)$ 将输入变换后与 $10$ 个整数比较。打印中间变量可以发现 $f(0)=0$,$f(1)=1$,但 $f(2)$ 很大并且看上去没有规律。

尝试打印 $f(-1)$ 发现会 Runtime Error,于是尝试 $f(998244351)$,$f(998244352)$,$f(998244353)$ 和 $f(998244354)$,发现有周期 $998244353$,并且是奇函数。猜测是指数函数,写暴力验证可以得到 $f(x)=x^{77977}$。

由于 $\gcd(77977,\varphi(998244353))=1$,所以可以直接求出 $77977$ 次方根。或者可以写一个暴力来枚举,跑五分钟不到可以跑出来。

一种可以拿到 $10$ 分的输入:

0
1
43409364
171593339
879723643
750576725
275034811
464166077
503262602
826391194

测试点 $9$

还不会。

测试点 $10$

还不会。

2024 年 KAIST 第 14 次 ICPC 模拟赛题解

2024-10-11 14:20:56 By Kevin5307

A

杜老师做的,听说是烂题。

B

签到题,先咕了。

C

做法一

倒过来模拟染色过程,考察联通块数的变化量。可以发现,倒过来模拟这个过程时,右边界有相同的颜色,下边界也有相同的颜色,所以染色会增加连通块当且仅当新的颜色与右边界和下边界都不同。

容易想到用线段树维护 DDP,每个节点要记录 $2^2$ 个值,表示不翻转/翻转行,不翻转/翻转列时的 DDP 状态。维护是简单的。

时间复杂度 $O(n\log n)$,有 $36$ 的常数,能跑过去。

做法二

先咕着。

D

不是我做的,咕了。

E

存在一个暴力的费用流做最小权完美匹配的做法,用 Cost Scaling 和匈牙利可以做到 $O(n^3\log V)$,常数比较大,应该是过不去的。

分析菱形覆盖的形态,发现对于上半部分,第 $i$ 行与第 $i+1$ 行间的竖直菱形数量恰好为 $i$,且相邻两层间的竖直菱形插空分布。于是可以把竖直菱形按照斜向分组,建出一个新的费用流,每一组对应 $1$ 的流量。此时只需限制点的流量和边的流量 $\leq 1$ 就可以保证竖直菱形插空分布。分类讨论一下边权的值暴力跑费用流。

注意到这个新图流量只有 $O(n)$ 大小,于是跑暴力即可,时间复杂度 $O(n^3\log n)$,可以通过。

F

签到题,求出每一层的 SG 函数,异或起来就做完了。

G

签到题,二分答案之后排序来 check 即可。

H

还没完全会,等过了再补。

I

杜老师做的签到题。

J

容易发现 $(1,0),(0,1),(-1,-1)$ 可以构造所有点,故答案 $\leq 3$。先特判答案为 $1$ 的情况。

要让答案 $\leq 2$,至少需要所有点在同一个半平面内。此时需要特判如果存在两个点方向恰好相反,如果还有不在直线上的点就答案为 $3$,否则答案为 $2$。

然后对于所有点在同一个半平面内的情形构造。对于所有点都 $x\geq 0$ 的情形,可以构造 $(0,1)$ 和 $(1,-10^{18})$ 作为答案。类比到所有情形,只需要半平面对应的直线的一个方向选择一个向量,然后找到半平面内尽量接近直线的点,往另一个方向拉到无穷远处即可。

尽量接近直线的点可以 exgcd 求出。

时间复杂度 $O(n+\log V)$。

K

可以建出一个差分约束模型,于是可以得到如果有解,那么存在一种方案每个点的值要么是 $0$ 要么是 $K$。

对于两个有包含关系的区间,可以确定大区间减去小区间的部分全是 $0$,并删除大区间。得到一个位置是 $0$ 之后需要把剩余的区间缩起来然后继续考虑包含关系,同时判掉区间被删空的情形。

对于不存在包含关心的情形,排序之后贪心即可,一定有解。

时间复杂度 $O(n\log n)$。需要注意实现的细节。

L

树上背包模板。

M

将代价拆到每条边上,变成 这条边交换的次数 $+$ 这条边两侧均出现了的颜色种类数。如果不进行交换,一条边的代价 $\leq 2$。对于初始存在一条边代价为 $0$ 的情形,显然取到理论最小值 $n-2$,特判即可。

然后可以发现,要让一条初始为 $2$ 代价的边变成 $1$ 代价,必须要用它进行一次交换,并且最终它恰好隔开黑色和白色。于是这样的边最多一条,只需要判这种边存不存在。

容易发现存在的充要条件是这条边:

  1. 将树分成了两个区域,大小分别是黑色点个数和白色点个数。
  2. 黑色区域有恰好一个白点。
  3. 白色区域有恰好一个黑点。
  4. 这个黑点与这个白点都不是叶子。

判断这四个条件即可,时间复杂度 $O(n)$。

时光荏苒

2024-08-30 20:07:22 By Kevin5307

时光荏苒,小 S 和小 Y 也会散去。而我们和一个人保持连接的方式就是把小 S 和小 Y 变成 S 接 Y,仅此而已。

Kevin5307 Avatar

Kevin5307