游记 GDKOI2024

GDKOI 2024 东莞市东莞中学松山湖学校

提高组 佛山市华英学校 GD-0085

1.6

8:27

密码是 Qi Mo Jia you 中间有很多特殊符号。

然后环境和正式赛场是一样的。打开虚拟机以后读了一下题目,大概感觉是 T1 可以做,T2 暴力很多,T3 先放着。

选了 T1。第一想法是先随意跑一个完美匹配,然后尝试调整。考虑形如 \(u_1\to v\to u_2\) 这样的一个增广路的切片,我们的目的是使得原来 \(mch[v] = u_2\),现在 \(mch[v] = u_1\),对黑色边条数的影响不妨刻画成两条边的异或和。我们就是对于这样的 \(u_1, u_2\) 在一个新的图上连边 \(u_1\to u_2\)。然后我们只需要找到一个异或和为 \(+1\) 的环就可以调整了。将图改为分层图就能找出这样的环了。

9:30

一直在调 T1,程序里写的 assert 跑不过大样例。原因是这条增广路经过了重复的右部点,导致有一些改的边重复改,最后改出来不是一个匹配。然后尝试是微调一下,但是发现出现这种情况的右部点可能有多个。然后有一个美丽的想法是说一旦发现重复的右部点,就说明我们可以把中间这个环摘掉或者把两边摘掉,不影响荅案。

所以我的做法是遇到了右部点就 break 掉重新枚举起点。

10:30

过了大样例。感觉算法还挺对的。然后就去写 T2。

一个想法是离线询问,对操作从右往左考虑,每次加进来一个覆盖操作就想一下他会问么影响后面的东西。可以枚举被覆盖的每个数字,维护上一次被覆盖的时间,那么在这个时间段上的区间求和操作可能要算上这个数字,这样就是 \(O(n^2)\) 的(假装 \(n, m, q\) 同阶,好吧确实是)。

11:30

大概写完了 T2 的 60 分。然后我也忘了是什么时间反正就是写了 T3 的爆搜 10 分,做 15 分的时候看到没有什么明显的规律,也没有背 BM 板子,后悔了。回到 T2。

然后观察到一个事情,就是考虑每个数字是愚蠢的,可以使用颜色段均摊的技巧,变成一个矩形加。但是它对应的查询操作比较奇怪,是对于每一列要取其中一个区间出来求和。这个东西是难做的。一开始考虑了把所有操作记下来以后 cdq 分治,想了一下感觉很合理,写的时候突然发现复杂度是假的,查询会查到中间所有东西而且每一列的区间全都不一样;考虑了树套树,树套树的标记打不下去,怪不得做不了。

想到这些以后就急了,不写了。把提交的文件夹拉下来过了一下样例。然后发现 T2 60 分代码里面有若干地方 \(m\) 写成 \(n\) 了吓死我了。

丢失了思考的欲望。

12:30

我不想写除了考试以外的东西。

14:30

T2 不是树套树,是分块。然后分块就强行维护就行了,看着挺危险的。题解写了很多不知道在说什么东西,感觉就直接做啊。然后我不敢相信 5e5 6s 可以过根号。顺带一提我把题解 pdf 每一页的照片拍下来了,需要的可以私信我。

T3 感觉不能做。启发的东西就是前缀最大子段和的差分 \(p_i=f_i-f_{i-1}=\max(0, a_i-p_{i-1})\)。然后后面是什么东西啊。

18:00

40+60+10=110.

T1 挂了。仔细想了一下发现不能直接跳过。他不是这个道理的,可能以后找不到这个解了。那这个算法是假的啊。还是想的不够周到。然后我发现今天比赛怎么没有打过一个 python 代码的?好像不仅没拍也没写暴力。明明最后还有一小时的。这个可能是问题所在,我应该写一个状压的。T2 有 60 分感觉其实有侥幸。

我要吐槽一下,T1 有 4 个 subtasks,所以我通过了 subtask 4,在 subtask 1, 2, 3 上答案错误。

1.7

未来可期。

手机写的。今天没有挂掉任何一分。然后总成绩是 40+60+10+100+65+35=310,金牌 rank 19。

8:30。看到没有大样例挺惊讶的。然后感觉 T1 T2 都能做,T3 这个构造不好判断难度,选了 T1。一开始就考虑怎么判定,先判定打完一套以后不能亏,用邻项交换法排序了判断,拍了一下确实是对的但是没啥规律。所以看了一眼部分分,没有能量好做,花费和获得有一个是零,肯定是先把无获得的打了,然后也不影响其他的。5000 不知道是给谁的。0/1 的很有前途,你一定是先把无获得的打完,然后打 1/1,其他的都不管。扩展到一般的情况,记收益是获得减花费。然后必然是先做负收益再做正收益,而且正收益只有花费最大那一个有可能有用。考虑负收益,你发现取到下界那一个可以尽可能调到正负交接的地方,最后就是所有负收益的和减掉负收益的最大获得或正收益最大花费是可能取到的下界。

完了以后做这个东西是一个像二位数点的东西,考场上建了笛卡尔树确定最大值后,枚举小的一边,离线询问做二位数点就是树状数组扫一遍。两个 log 的,本机 1e6 挺快。具体细节好多写了两个小时。

然后是 T2。首先参考循环取模可以把那个 f 写成 m 的 gcd 次方,那这个东西性质就多了啊,之前看过 3b1b 是一个单位根反演问题,但我不会找单位根。所以写了 \(O(m^2+mlog^2m )\) 的一个背包加 ntt 暴力快递幂。65 分。

然后一小时冲刺,T3,首先爆搜,然后发现就这是一个线性方程组,所以直接高斯消元有 35 分。

比赛结束听讲评。T2 是不需要显示的求单位根,使用解出单位根的方程解一下。看上去很轻易。

T3 确实是构造,就是对一个十字架做操作,相当于是分治下去了。具体细节疑似可以逐层处理。

没时间写了,已经在地铁上了。再见。

期末加油,未来可期!

posted @ 2024-01-06 21:30  caijianhong  阅读(552)  评论(1编辑  收藏  举报