[随笔] 2024 年新生程序竞赛游记
就在今日,今年校区的程序设计新生赛落下帷幕。作为一名参赛者,还是对这次比赛的趣味性非常满意甚至而言是惊喜的。
校区的老师和学长(和学姐?)们考虑的非常周到,几乎完全使用了 XCPC 的风格——ACM 赛制、题目随机难度、气球、封榜滚榜。
早上有数竞培训,上到十一点半,草草的吃完饭,记了记缺省源和一些板子,便和 HAVEN 赶到考场准备十二点半开始为期五小时的比赛。到达考场已经是二十来分,我赶紧上机测试编程环境,结果发现 VSCode 啥插件也没装彩色记事本了属于是,于是用回不知多久没用过的 Dev-C++,但总的来说 Dev-C++ 对我这次比赛还是有挺大影响的,比如我总是把 F5 当成 F11 来按…
赶紧打了个缺省源,结果还没打完就开赛了,急于拿一血的我赶紧登录账号看 A 题。A 题是一道数学题,但是当时实在过于急躁,以至于忘记这是一个几何分布,写了好几次都算错,然后越来越急。结果过了几分钟看到一血气球已经送出,于是我选择跳过 A 题,转向 B 题,结果一看,题目又臭又长,估计是一些难题,又直接跳过(此时的我还不知道本次比赛的难度如何,我仍以为会像历年题目考线段树、网络流、以及一些抽象概率题,因此看到 B 题直接跳过)。
然后随便点了一道 F 题,此时我真的非常急于过一道题,甚至在 F 题条件还没有看完就直接构造,提交一发直接 WA,再定睛一看发现题目有两个约束条件,于是开始解方程,但是方程不是很好解的样子,而且当时实在是很难静下心来构造一道题(因为我不知道考场上大家水平如何,我怕 F 题的一血又被拿下),但是还好在搜索解的时候发现有一类特殊解,直接构造后提交拿下 F 题一血。
此时离开赛已经半个小时。准备看榜做题,看到大家都只做了 A 题,所以只能再随便选了一道 M 题,发现是简单的字符串查找和栈的使用。直接写了一个模拟,提交 TLE。这时又急了,感到今天貌似有些出师不利,又去看榜做题,发现有几个人做了 H 题,读完题目发现是数论打卡题,因此直接一发 AC。
然后又回看 M 题,想再拿个一血,换了一个指针做法,WA,仔细思索后发现貌似指针不行,而且改起来很麻烦,所以又把它放在一边。再看榜时发现天塌了,榜一已经比我多做三道题,于是跟着榜一的脚步一发提交通过了 一道模拟题 D 题。然后跟着榜一做了 E 题,结果因为输入输出流解绑定问题送了 20 分钟罚时。一朝被蛇咬,十年怕井绳,后面的题再没敢用快读快写和输入输出流解绑定了,好在题目不卡输入输出。
这时就大概有点摸清这次比赛的整体难度了,对我来说不会特别难,因此心态也逐渐放平,开始回头做 A 题,终于想起是几何分布,结果当时居然没想起它的期望就是概率的倒数,直接迭代 1e5 次暴力计算期望,结果 WA,我以为还是输入输出流解绑定问题,打了注释再交一遍还是错,这时又有些崩溃了,所以到处乱改,改输出小数位数,改迭代次数后再交,终于 AC。后面赛题讲解时才发现是迭代次数过少…所以赛场上纯粹是运气好…
然后打算再拿一道一血,看了看所有还没有 AC 的题目,然后把目光转向了 G 题,结果一看,又是字符串,而且要比 M 难一些。大概模拟了一下写了一坨屎山代码提交,结果 WA,叹一口气后决定重构代码,重构后思路变得无比清晰,直接 AC。此时对字符串信心大增,突然想到 M 题超时有没有可能是栈的问题,于是换成了数组维护,结果 AC…今天比赛实在令人汗颜,总是在莫名其妙的地方出问题。
此时正在激烈地和榜一竞争,于是我开始看他 AC 里我还没完成的 K, L, I 三题,结果一看,好家伙,全是模拟题,直接爽刷,在 L 题四舍五入输出错误罚了 20 分钟的情况下,一个小时提交四次 A 了三题,超过榜一成为榜一。
最后一小时,进入封榜,看到 C 题只有一位学长大佬 AC,其他题还没有 AC 记录。遂打算从 C 题入手。发现是搜索题,尝试第二个样例时发现递归层数过高爆栈了,因此开始转向记忆化搜索,在此过程中发现棋盘的情况与结果无关,考虑能不能打表,最后发现 1M 的代码过长不允许提交,遂放弃。但实际上记忆化搜索远远够用,因此我直接上记忆化搜索,成功 AC。
现在剩下 47 分钟,放在我面前的是两道没人 AC 的题——B 题和 J 题。考虑到我实在害怕 B 题那种又臭又长的题目,又恰巧前面写某道题时貌似有一些对 J 题的想法,因此决定先做 J 题。结果发现这题还挺有意思的,因为我突然发现所谓阶乘存在一种进制的性质,一下子就写完了,全过程只用了七分钟,我愿称此题为封神之题!
最后半个多小时,开始看 B 题,仔细读完后貌似不太难,只是有很多需要分类讨论的地方,写完代码调试完只剩下五分钟,提交后错误,最后一分钟加了一个特判,再次提交,还是错误。最后以差一题 AK 来结束本场比赛。
比赛结束后自然是合照、赛题讲解、滚榜、以及一个抽奖环节(虽然什么也没抽到)。
滚榜过程还是非常刺激的,四到六名激烈竞争,一到三名下面断层,也是激烈竞争(但是上面提到的学长是打星参赛的,所以实际上是我和另一名选手 snowdrop 争,不过我也通过上次和他打蓝桥团队赛认识了他)。最终我比打星参赛的学长多一题 J 题的优势拿下榜一和金牌,比银牌榜三 snowdrop 多三题,比铜牌榜四 漾颂 多六题(是的,我甚至认识铜牌,因为我和他同班)。
考完后重构了 B 题的实现方法,又增加了几个特判,最终在赛后完成了这套题。第二天就收到了校区 ACM 集训队发来的邀请函,最终和比赛二到六名的选手们(不包括打星参赛的学长,所以实际上是三到七名)一起进了集训队,接下来的时间就要和集训队的朋友们一起学习和合作了。
这次比赛真的学到挺多新东西,比如上面说到的进制,而且因为自己是第一次打这个赛制的比赛,所以也认识到自己对待 ACM 赛制的比赛的心态上需要有一些调整(以往 OI 赛制的比赛不需要争夺时间,但是 ACM 赛制越快做完越好,也是因为这个原因这次实在是非常急),也知道自己在字符串方面有很大欠缺,希望下次还有机会能参加这类比赛。