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,还是按照一贯的复习风格复习:多做简单题,练习代码能力,也做一些有点难度的题。与此同时我应该也练一练读题能力而不是总挑好读的题做、让同学概括题意。

posted @ 2023-01-18 20:36  lotus_f  阅读(87)  评论(0)    收藏  举报