CSP-S 2022 游记

· · 生活·游记

1. 前言

都过了一年了……

只参加了 CSP-S,因为感觉如果上午打 J 体力消耗较大。

自 THUSC 以来,没学啥算法,不过做了一些题,所以水平应该还是有提升的。

暑假是多校联训,不过感觉题目不咋样。

CSP 和期中正好撞上了,只停了一周课,剩下一周给期中。

期中寄了但没完全寄,只能说是在一周复习下的正常发挥吧。

怀着忐忑不安的心去参加这次 CSP。

2. 初赛

初赛还有说的必要吗(

不会负数取模和归并名字的二分。于是寄了,77.5,但是肯定过了。

被 HMZ 吊起来打。

3. 复赛

3.1 复赛前

考复赛之前的一周恰好是期中考试,但是期中考试周三就考完了,于是周四周五继续停课。

停课的时候就一直打板子,因为常年玩 acwing 的天梯,所以打板子的比赛次次都赢(

印象最深的就是有一次 线段树1 冲到了 2min32s。以前都是 2min55s 左右。

3.2 复赛当天

一直觉得我不太能切 T1,可能是去年廊桥分配留下的心理阴影影响了我吧,所以做题策略就是:尽量切 T1,剩下的多打暴力。

考场就在本校,不过机房因为是新建的所以没去过。和我同个机房的本校同学还挺多的。芦苇林 坐在我旁边,后面有 zztqwq、David24、HMZ、xuanxuan001(看他游记前都不知道是同一个机房的,还好没搞我心态)等。也有外校的,比如 kaixinguo(但是没看到)。

在 14:20 看到了题。

首先看到了 T1,发现比廊桥分配良心很多,又想了想,发现直接 dp_{i,j} 表示编号为 i 个点作为第 j 个点,然后暴力转移即可。

然后看到了 T2,吓我一跳。之前打赌一定不会考博弈论,而且博弈论我压根没学过。随便看了看就去看 T3 了。

T3 题面巨长,我压根不想读,就跳过看 T4 了。T4 看起来很可做,发现特殊性质就是树高 \log,而 dp 只会涉及到一个点的邻居,所以直接 dp 就出来了。这下有很多分。

看完题基本上就到 14:30 了。为了求稳又看了一眼 T1 题面,不看不知道,一看吓一跳!题目要求四个点互不相同!原来的思路错了。我开始重新想思路。

这道题看起来可以随便乱搞,但毕竟是 T1,还是要想正解的。想起考前看的 NOIp2021 数列,比较妙的地方就是将状压 dp 转化成线性 dp。这道题也可以吧!但这道题的问题是,这四个编号不一定递增。之后就没思路了。又想了很多个乱搞,但都没实现。直到 20min 后,才有了一点思路:是不是可以 meet-in-middle?枚举 B,C 两点,然后算出 1 与 B,C 的公共部分,再怎么算一下?因为要求最大的,所以在不重复的情况下肯定选最大的几个。这样我的思路就出来了,对于每个点求出来它与 1 都能到的点的点权前 5 大,之后枚举 B,C 花 5 \times 5 的时间算一下。

这时是 14:50。花了 10min 写完了代码,测完了大样例,又造了一个极限数据测了一下时间,发现没问题,就去看 T2 了。此时大概是 15:05。

仔细读了一下 T2 题面,发现其实博弈论是诈骗,实际上是个贪心题。显然第一个人要选的是能使第二个人决策最小的点最大的那个点。这个点显然只会有 5 种取值:正数最大、正数最小、0、负数最大、负数最小。而第二个人应对第一个人也是这五种(中选最小),所以直接用 8 个 ST 表维护这两个数组的极值即可。想出来思路就开始写。犯了一些奇奇怪怪的错误,调完可能已经 16:00 了。不过这时候还以为大家都不会 T1,所以心态比较好(

之后还是不想读 T3 题面,就去看 T4 了。感觉赛前口胡的思路没有什么问题,又完善了一下思路,就开始写了。写完发现前三个样例都过了,而第四个没过。这时候我猜我的思路可能出现了一些问题。

我确信只带邻居做 dp 已经没有问题,但我的代码中带邻居的部分只有 k=3 的第 i 个点经过第 i-2 个点的邻居到达第 i-4 个点。想了一会,我发现邻居还需要另一种情况,就是一个点的邻居可以走到另一个点的邻居。只要在链上的权值特别大,而邻居全都特别小,这样就可以一直走邻居。

想到这一点,我以为需要将所有邻居放入 dp 中一起求,甚至还需要循环 30 次迭代。这样复杂度就升天了,不知道几个 \log。但我还是写了一下。写完后,大样例直接 T 飞了,跑了 30s 还没出来。我意识到有个地方可以直接记录然后优化掉一个 \log,就写了一下,果然大样例出来了。又发现一个点的邻居只需要权值最小的那个,这个可以预处理,就又优化掉了一个 \log。最后用了一些常数优化就将极限数据卡进 3s 了。

这时还有半个小时,我打算全力冲 T3。我以为第一个条件是判断一个点是否处在一个长度大于 1 的环中。这样第一个条件就可以判断所有强连通分量是否大于 1 了。于是我开始写。大概花了 15min 就写完了。测样例,发现此时 codeblocks 的输入好像有点问题(第一个询问的答案在第二个询问后才输出)。于是我确信自己一定是输入写挂了,就一直调下去了。直到最后也没调出来。就只好交了一份连样例都过不去的代码。

最后离场的时候估分 100+100+0+64=264。

出考场的时候还以为大部分人 <250,结果一问才知道全都 300+,自闭了。如果我第三题更仔细的调一调就应该也 300+ 了。

wz20201136 切了 T3,xuanxuan001 会 T4 但是没调出来,深刻感受到了与神犇的差距。

晚饭 nnsmnrw 老师请客,以为是出去吃饭,结果是去教师食堂吃的(

不过有一个大蛋糕,还不错。

3.3 复赛后

在各大平台测试了一下,发现 T1、T2 都没挂,而 T4 计算错分了,是 68。T3 果然爆零了。

评测的分数如下:

洛谷:100+100+5+68=273。

infoj:100+100+0+68=268。

计蒜客:100+100+0+68=268。

小图灵:100+100+5+68=273。

在小图灵上看我这个成绩可能是 BJ 初二 rk3,相较去年没有任何进步,自闭了。不过这些人甚至没有 300+ 的(而且他们 T3 都 \ge 60),而且 T1、T2 中至少有一道题挂分。所以如果 CCF 使劲卡 T1、T2 的错解,我还有可能 rk1((

upd1: T3 读对题之后又写了 40min 才得了 60,看来考场如果没读错题可能也没有 60,不过可能 40 或 50 还是比较好拿的。

upd2 on 2022.11.7: 这一次 CCF 又让人大跌眼镜了。T1 居然放了不开 long long 的做法,T3 全输出 NO 有 45。而我 T3 因为转化错题意了所以只有 25。于是最终成绩是:100+100+25+68=293。大家好像都上 300 了,我垫底了。这个成绩 BJ 初二能不能进前 5 都是个问题,退步了好多。

upd3 on 2022.11.7: 可能负面情感的来源都是基于比较的吧。因为 HMZ 得了 312,所以我郁闷了一会。不过现在感觉他得到这些分也是侥幸的,而我该拿的分都拿到了。每场比赛基本上都会有失误,T3 的失误也不是特别严重。这个成绩已经满意了。

4. 总结

感觉这一次发挥还可以,这也是我第一次在官方考场上切掉蓝题(T1,NOIO 的丹钓战当时甚至不会)。不过后面的发挥有点差,主要是心态的原因。

当时还剩 30min 看到 T3 时的心态是:“如果能拿分更好,拿不了分也没关系。”但没想到读错题了,读错题情况下暴力是 20 或 40 分,但正确题意下 60 分有手就行。这是一个比较大的失误。还是需要每一刻都尽可能地拿分。

T4 实际上压根不需要迭代,直接顺着 dp 就行了。T2、T4 写代码时间还是太长了,应该想到更加好写的写法、争取一次写对。

接下来冲刺 NOIp,还是按照一贯的复习风格复习:多做简单题,练习代码能力,也做一些有点难度的题。与此同时我应该也练一练读题能力而不是总挑好读的题做、让同学概括题意。