哈工大丁文涛:CCSP不只是算法竞赛|CCSP金奖说
哈尔滨工业大学丁文涛在2024 CCF CCSP竞赛中获得金奖,每年CSP高分考生(200分及以上)均可报名参加CCSP竞赛。第36次CSP认证考试将于12月8日举办,报名正在进行中。CCF不定期邀请CSP高分和CCSP获奖选手分享经验,希望能够帮助同学们取得更大的进步。
非常欢迎更多CSP优秀学子分享自己的宝贵经验,联系:csp@ccf.org.cn
算法竞赛缘起
我来自竞赛强省江苏省下设的竞赛弱市扬州市。接触算法竞赛纯粹基于偶然——初中校本课程本着玩电脑的心态选中了信息学奥赛,此番命中注定改变了我接下来的人生走向。我初一才开始学习算法竞赛,依赖于省内其他高校组织的集训,以及各种在线竞赛平台提供的公开资源。因为资源匮乏,且并不十分重视竞赛的学习,跌跌撞撞直到初三才混到了NOIP 2018普及组一等奖,实在说不上有水平。
在接下来的几年里,算法竞赛圈发生了诸多剧变。2019年NOIP因特殊原因宣布取消,取而代之的是CSP-J/S认证;2020年NOIP宣布重启,赛制发生重大改变,原先两天六题共600分的格局转变为如今CSP-S 选拔、NOIP考核一天四题共400分的格局,同时普及组被剥离NOIP(因此我参加的NOIP2018普及组相当于最后一届“普及组”)。同期爆发的新冠疫情也对竞赛进程产生诸多影响,如Winter Camp改为线上、特殊时期诞生的竞赛NOI Online。此外,2019年前后推出的强基计划改变了原先依赖竞赛自主招生的格局,对信息学竞赛事业的发展产生猛烈冲击,许多选手在此期间选择放弃了竞赛学习,转而投入到了文化课的学习中。
然而,经历如此剧变,我对算法竞赛的热爱不减。我于2019年参加 CSP-S提高组侥幸获得一等奖,于2020年参加NOIP以及省选遗憾未能进入江苏省省队,以非正式选手的身份参加了NOI2021并获银牌分数线。
OI生涯所获奖项
回顾我算法竞赛生涯的前半生,其中的点点滴滴满是惊喜与遗憾,其中的轨迹更是烙上了时代印记。这段经历为我带来了宝贵的财富,让我接触到了独特的算法竞赛的魅力。
大学时期的我热爱不减,参加了多项算法竞赛相关比赛。因此,我也参加了专业级CSP,以及其对应的全国决赛CCSP。
参赛经历
此次CCSP在浙江金华举办,来自不同学校的选手在此共襄盛举。有幸能在这里与众多选手切磋,我倍感荣幸。赛前,我见到了许多熟悉的算法竞赛选手:
图中是算法竞赛圈知名选手小粉兔,他正在向众人展示冰红茶。小粉兔曾获得NOI2020金牌第51名并进入清华大学就读,他在此次CCSP中荣获铜奖第一名。
在比赛之前我就得知,CCSP除了考察基本的算法之外还侧重于工程类代码的实现,强调选手阅读较长题面并根据要求实现相应代码的能力。为此我对历年试题做了大概了解,对出题风格有一定的把握。
开场五分钟,我猜测出题人的意图很快切掉了第一题签到题。第二题的题面略长,并且操作繁多,看上去是一个数据结构题。但根据我的经验,以及题面上保证数据随机的提示,猜测本题可能是考察选手使用暴力策略实现基本操作的功夫,于是我也在很快时间内通过了第二题,此时比赛开局半个小时。在接下来的一个多小时里,我观察了一下第三题的操作,觉得没有太多想法,在观察到题意可以转化为带修查询区间颜色数后,使用了带修莫队做法过了题目。此时距离比赛开始时间一小时五十分钟。
前三题AC记录的截图
休息片刻,在接下来很长的一段时间里,我尝试编写第四道题的代码。由于工程题题面的长度较长,且需要支持的操作较多,理解不同操作的行为以及相互关系花费了我较长的时间。长时间的作战让我感到体力不支,这是第一次参与长达十二个小时的比赛。尽管遭遇了一些困难,随着题目功能需求的实现、程序bug的修复,提交记录的得分呈现上升趋势,最终我在15:45左右通过了本题。
吃完晚饭,午后不振的精神状态得到少许恢复。在接下来的时间里我尝试编写最后一条题目的代码。然而或许是我对题目的理解出了问题,拼尽全力无法战胜,最终在此题获得了80分。
此次比赛的结果并不让我感到特别意外,基本上在预期范围内。我是学校校队里比较擅长写代码的选手,相对熟悉各种算法的编写以及应用;同时我参与过诸如网络公开赛筹备、项目参与等工作,对长代码的编写有一定的经验,因此有一定的信心。尽管此次最终未能取得满分的成绩,但此次旅途依然让我感到十分高兴。
CCSP获奖证书(CCSP2024期间,有幸遇到NOI主席杜子德先生,特意请他在我的证书上额外签名,他给我们这代选手留下了很多回忆,我很钦佩杜子德先生所做的竞赛相关工作。)
备赛策略
参加CCSP的选手有很多具有竞赛背景,在算法竞赛领域取得过一定的成绩。不过作为一门与算法竞赛不完全相同的竞赛,CCSP依然值得进行关注。为此我提出的几点备赛策略能够帮助到即将参加CCSP或者CSP的选手。
1、利用网络资源
图中为tiger2005主持编写的开源竞赛工具CCHv2。他很擅长工程类代码的编写,并在此次CCSP中荣获第九名。
各种在线算法平台提供的竞赛试题以及评测服务,为有志于参加算法竞赛的选手提供了优质的竞赛资源,选手可利用题库资源、题解资源、社区资源等提高自己的算法竞赛水平。
某在线评测平台的截图(有很多算法竞赛选手在上面担任题库管理员无偿服务用户,比如参加此次CCSP的选手Studying Father,他同时入选了2025年度CSP代言人。)
2、沟通交流学习
由于CCSP允许选手自带U盘携带离线资料,因此准备相应的参考资料也是备赛的重要一环。除了可以自己制作算法模板以外,也可以参考其他选手制作的算法模板,做到万无一失。
3、增强代码能力
此外,对于较长的代码,调试工作也是重要的一环。在Linux下可用的调试工具有gdb等,也可以利用CMake等工具组织代码,尽量保持代码结构清晰。参赛选手可以在备赛时提前熟悉操作系统以及竞赛环境,并且尝试使用工具提高效率辅助自己代码的编写。
不只是算法竞赛
在过去几十年以来,中国的计算机领域得到了长足发展。得益于各种公开算法竞赛相关赛事的普及,比如CCF举办的非专业级以及专业级CSP认证,当下有越来越多的年轻学生也参与到了计算机事业中去。从某种意义上来讲,我这种早已不再参与中学生信息学奥林匹克竞赛的选手已经可以被称为“算法竞赛老人”了。随着算法竞赛的快速发展,在过去很新颖的技术最终也会得到普及,相比于考察对进阶/冷门算法的掌握,当下算法竞赛更多的是考察选手的思维能力。
然而,算法竞赛对于我的陪伴并不会随着我年龄的增长而逐渐老去。我选择了算法竞赛这条道路,算法竞赛施加于我的影响也会陪伴我一辈子。受算法竞赛的影响,我选择了计算机科学与技术这个专业,并且确实喜爱计算机编程,喜爱基于大家的热情建立起来的计算机开源社区。在这里接触到的技术允许我实现各种不可思议的事情。在算法竞赛以外,我可以尝试学习前后端技术编写网页,也可以尝试一些我从未接触过的领域如网络攻防(CTF)等。
我自知不是天赋型选手,受限于小城市以及自身思维能力的局限性,我可能注定无法像一些选手一样解出十分复杂的题目取得十分高的成就,也无法通过理论创新贡献出当前学术界尚未解决问题(Open Problem)的解答。尽管如此,有一分热,发一分光,我希望尽我所能做出贡献。
某在线比赛平台的比赛分截图(图中排名第一位的是传奇算法竞赛选手周康阳,他作为中国队的一员出征国际信息学奥林匹克竞赛(IOI2024)并取得了全场唯一满分的惊人成绩;图中排名第三位的是知名算法竞赛选手滴叉,他很可爱。)
最后,祝大家在下一届CCSP中取得理想的成绩!