2024-CSP-J/S 游记

yingkeqian9217

2024-10-27 16:31:23

Life & Travel

Day -1

模拟考又双叒叕考炸了,荣获全年级倒一,原因是 T2 简单题没想出来暴力也没打多少,结果 100+30+0+0 被同机房同学 100+100+35+20 吊打了。

Day 0

由于前一天没睡好,导致今天差点晚起(这学期第一次差点迟到www),上午很紧张,没什么刷题的心思,开始研究学长的代(游)码(戏)。

下午浑浑噩噩不知道在干什么,四点才出发,到了考点基本已经八九点了,最后啥也没干就睡觉去了。

Day 1

上午

由于酒店和同学们都不在一起,早上只能自己一个人吃,只有零散几个考生。雨下得挺大,加上刚睡醒,感觉有点头痛。

紧赶慢赶在考前半个小时到了考场,所幸考点和考场都和去年一样,没有找很久。路上还看见了机房同学,好像我们中学的大多数都在这个机房。

玩法果然还是和去年一样,压缩包和 PDF 两个密码,先随便打了个缺省源和对拍批处理文件,然后开始摆烂。

感觉 J 组考生平均年龄也不是很低,我四周的考生都比某机房同学高多了,想想这有可能是我最后一次参加 J 组了,有点感慨。

解压包密码很快就发了,然后是文档密码,存了下密码就开题了。

看 T1,这不打牌吗,我会,直接 set 秒了。

看 T2,J 组特有的暴搜题,随便模拟秒了。

看 T3,这不经典字典序题吗,感觉适合当 T2,直接一位一位贪心过了。

一看时间,才 9 点,看一眼 T4,这个感觉是图论啊,不过这个换人接龙有点难处理,不管了,先看数据范围:10^5,2\times 10^5,10^5...10^2

一边疑惑为什么 10^2 不写成 100,一边开始想类 O(rn) 做法:f_{i,j} 的意义是显然的,唯一复杂的是不同位置的同一个数。

仔细读了下题,感觉可以拆点+线段树维护,后来发现可以双指针优化到 O(Tr(\sum l_i+V)),于是信心满满地开写了。

写完调了下样例和清空问题,开始跑大样例。1s,2s,3s...这有点慢啊,不应该啊。一测最后一个样例,计了下时,"20984ms",当场难蚌。

悲伤的笔者开始打红心大战摆烂了,打了一会回头一看,一个活生生的监考员在我背后盯着我,赶紧关掉,继续想题。

后面就一会调试一会打游戏,终于把 T4 优化到线性空间,时间 "5678ms",虽说还是悬,但是总算没有这么慢了。

出来的时候人是崩溃的,感觉自己做法伪了,赶紧问了一下同学,没回我,更紧张了。

后来看了一下你谷讨论区,T4 做法好像是对的,心情就稍微好一点了。

不过又看了一下前面的题,T1 没问题,T2 没问题,T3……诶,怎么是分讨/递推,不能直接一位位填吗。毕竟当时只有一组大样例,虽然我对拍过了,但由于值域过小、数字对应木棍数未检查等原因还是有风险。

下午

中午躺了一会,紧张没睡着,还是有点头痛,但还是赶紧去考场了。

上午和下午是同一个机房,只是分区有点区别。唯一的区别是下午看见了中学大佬们,有点激动。

感觉下午发密码更早了一点,不过今年的我可比去年有信心多了,先写好了缺省源就开题了。

根据我上午的猜测,今年 S 组应该是 T1 水题,T2 传统简单题,T3 人类智慧题,T4 不可做题。

看 T1,嗯,题面挺容易读懂的,不过这个一看样例就是直接取众数出现次数啊。

本来想仔细证明一下结论,但是构造完就开摆了,直接开码,不出所料过了大样例。

看 T2,什么数学题,先做第一问吧。分类讨论一下,匀速直接判,加速就找最后一个测速仪,减速找最近的测速仪——但是这好像还得排序之后倒着扫,可能还要开数据结构?还得处理出超速区间?

没怎么仔细想就开码了,结果第一次读错题,以为是有多少测速仪测到超速;第二次树状数组写一半发现不需要,直接用 set 维护就行了。

此时已经过了接近一个小时,我测完小样例(第一问)就看大样例,但是我的结果和答案很接近但是错了。

又是一通乱调,终于发现我还想加减速的情况判反了,一测大样例,"1 2 1 1 2...",什么东西,差更远了。

仔细手算了一下大样例,发现式子里有一个正负号搞反了,这下应该好了吧,又测了一下,还是有一个点错了。

我左思右想,此时又过了半个小时(后来我才知道,同学此时已经切掉前三题了),才猛然发现我速度忘记平方了。

费尽心思才过了第一问,开打第二问吧。嗯……线段最小覆盖,感觉得先排序,然后贪心吗?当时没想这么多,又暴力开了一个 set 维护右端点,每次要取时就取最小值,莫名其妙就过了大样例——虽然最慢跑了 2.5s。

尽管感觉自己做法很假,但是好歹过了大样例,就先开了 T3,红蓝染色,等价于取子序列,那应该是 dp,状态存两个序列的末元素,从值域来看有点像。

但是这玩意好像可以优化,上一个元素必取,这样一共就只有两维了。这个 trick,有点熟悉?

我这才意识到这是一道我做过的原题,只要先直接合并相邻相同数,就可以用桶模拟 dp 数组直接达到 O(n) 的复杂度。

于是在五分钟以内打完了 T3,也是一遍过,但是看大样例的大小有点没把握。

我心想同学肯定也做过原题,估计早就过了,就怀着放松的心态开了 T4。

题面很抽象,但至少说明不是原题吧(?),这个应该要用一坨二进制的 trick,写起来估计细节很多。盲猜是分讨题。

一看时间,还有一个半小时,算了不急,先打 O(Tn^2) 暴力吧。

一打就是半个小时,当时可能精神状态已经进入了神游期,先是因为调不出来上了个厕所,然后有喝完了一整瓶水,还吃掉了带的所有食物——而我之前一口都没吃过。

终于跳过了样例的第一个询问,还有半个小时,还有机会过,先不检查文件了,先继续调吧。

怀着这种心态,我一口气调到了考试结束都没调出来,最后匆匆记下了文件大小就收东西走人了。

出考场,看见了中学大佬们,本来感觉这回人均 300+ 的,我只有 300-。听他们一说好像 T4 都没调出来,尽管他们至少过了小样例。不过他们 T3 做法和我有点不一样?

回去的路上看了一眼题目,T1 怎么都是模拟?不能直接取众数吗?再看 T2,有人炸精度 100->80,我不会也炸了吧,毕竟这题可以做到不用浮点数。而且我的谜之离散化+set 维护线段也使我的常数巨大,多半是会挂分了。

看 T3,这是原题倒没错,不过还是没有和我一样的做法,更慌了。直到我看到 T4,黑题啊,那没事了,这回人均 300 了。

J 预估分数:100+100+100(0)+60=360(260)

S 预估分数:100+80+100(20)+0=280(200)

P.S.

机房账号登录不上,找教练查了一下分,可惜没看到其他人的分数。

J 实际分数:100+100+100+100=400(360)

S 实际分数:100+100+100+4=304(280)

应该都能 1= 了。J 组初赛 100+ 复赛 400 应该也挺少见的吧/qq。