中山大学陈景泰在2025 CCF CCSP竞赛中获得冠军,指导老师为中山大学林瀚、张子臻和万海。每年CSP高分考生(200分及以上)均可报名参加CCSP竞赛。第40次CSP认证考试将于12月7日举办,报名正在进行中。CCF不定期邀请CSP高分和CCSP获奖选手分享经验,希望能够帮助同学们取得更大的进步。
非常欢迎更多CSP优秀学子分享自己的宝贵经验,联系:csp@ccf.org.cn
人物介绍
陈景泰
中学就读于华南师范大学附属中学,目前是中山大学2023届计算机系本科生。中学期间获得WC金牌和NOIP一等奖等成绩,大学时期取得多次ICPC和CCPC赛事的金奖,其中包含第49届ICPC上海站季军和第10届CCPC重庆站冠军。另外,也取得了共七次CCF CSP认证满分,在2024年CCSP中获得第九名,在2025年CCSP中获得第一名。
“不同寻常”的算法竞赛之路
和大多数曾经接触过信息学竞赛的学生类似,我的算法竞赛起始于初一年级。当时的我还只是一个能力稍稍突出的数学竞赛生,随着我来到初中,接触到信息学竞赛这一领域时,我不由得对算法产生了极大的好奇,并在入学不久开始了信息学之路。不过,随着我在信息学竞赛学习的深入,我也开始对计算机本身产生浓厚的兴趣。这一兴趣驱使着我尝试搭建出简单的生产工具,从初中时期借助简单的C++语言编写软件,到高中时期编写出合格的桌面软件。我仍然记得,在参加2021年的THUSC时,第二天的光线追踪题让我第一次感受到计算机学科本身的无限魅力。即使我在赛场上因为指针问题没能完美体验这套题,我也在赛后成功复刻并自己实现了整套题目。这场比赛给我带来了莫大的鼓舞,让我开始借助相关赛事学习到了计算机学科诸多领域的皮毛,包括编译原理、计算机图形学、数字电路等。上述的学习对于“正统”的信竞学习而言显然是在不务正业,而在我看来,正是对计算机学科本身的深入学习,让我产生了与众不同的思维方式和编码习惯,在接触新算法时会更愿意剖析算法的本质,在编码时也更习惯通过工程的方法优化代码的实现。事实证明,这种与众不同的特征让我能够在大学期间适应高节奏的算法竞赛,也在CCF CSP认证和CCSP竞赛中完全发挥了自己的特长。
注:陈景泰作为中山大学代表队一员参加ICPC全球总决赛
本次参赛的体验
本次比赛的赛制和去年类似,前三题是和算法竞赛相关的题目,而后两题则是偏向于计算机系统设计的题目。比赛时长为12个小时,为选手提供了相较于快节奏的算法竞赛而言更多的思考、分析、编码和调试的空间,也需要选手合理规划充足的时间,避免在赛程的后半段手忙脚乱,失去比赛节奏。
本场比赛的前三题相较于去年而言难度有所下降。第一题是一个二进制相关的题目,使用贡献分离和分治思想即可快速解决;第二题是融合了动态规划和操作系统背景的题目,需要选手通过题目描述对堆上内存依赖和回收具有一定的理解,并且能够将后续的移动问题转换为算法竞赛常见的数学模型,通过动态规划以及一定的优化策略得到足够快速的实现。第三题的算法竞赛风格则更为明显,需要根据题目给定的限制,求出满足某种提交的所有排列中,某一排列的某一位上的值,需要选手能够在暴力的基础上,通过预处理数据结构,压缩处理数量较多而内容相同的操作时需要的复杂度,最后在可以接受的时间复杂度内解决。
本场比赛的后两题作为计算机系统设计相关的题目,则更考验选手的编程能力。第四题是一个和数据库原理和编译原理深度相关的题目,需要选手正确解析输入给出的简易SQL语言,在此之上借助子集动态规划优化“重排表格的级联方式,最小化某一模型下的级联代价”的问题。我有幸在高中时期接触过编译原理相关的知识,在赛场上也是通过标准的Lexer和Parser结构得到语法树,随后在语法树上对本地进行语义分析和计算。我在下午三点的时候完成了这一题的编码,随后在傍晚六点找到了代码中的一个细微的错误,幸运的成为了本场第一个通过这一题的选手,而另一位选手也在封榜之后成功通过了这一题。第五题是一个跑分类的题目,需要选手借助五个队列、五个缓存区以及一个无限大的存储区,优化一个带依赖关系和读写代价的任务分配问题,最后通过十个不同的测试数据,按照选手的相对排名分别打分并相加,得到最终的分数。我的实现方案是通过对任务的被依赖次数、读写的代价、执行任务所需的时长等指标,对每个任务进行加权排序,随后在优先的基础上实现时间片段的推进,在队列和缓冲区出现空闲的时间片段下,查询最优的任务并执行。另外,本题是下发了所有输入数据的,而输入数据本身实际上就存在一定的启发性,我也成功利用这一启发性进一步优化了代码的跑分,最终取得了本题的最高分。
注:孙凝晖理事长为获得金奖第一名的陈景泰同学颁奖
学习和备考建议
在最后,我希望给正在学习算法竞赛的学生,以及任何一个对算法竞赛、对计算机系统相关领域感兴趣的人们,提供一些建议:
1.准备CCSP竞赛,除了需要在算法竞赛层面进行一定的准备,更需要在计算机科学领域进行一定的了解。在本场比赛中,大多数选手面对第四题这种光是题目描述就长达十页的题目感到无从下手,而在具备一定的数据库和语言解析基础,再加上充足的题意分析后,本题的内核实际上并不复杂。与此同时,操作系统的相关知识也降低了第二题的题意理解难度。
2.任何知识的学习方法从来不是纸上谈兵。事实上,通过一定的编码逐步积累代码能力,在某些情况下也可以和其他选手拉开较大的差距。在实际训练中,除了追求极值的效率外,也需要保证代码的可阅读性,确保在后续的调试过程中能够更清晰的分析代码架构,从而快速找到问题所在。
3.最后,时刻保持对所在学科的热爱,让热爱本身作为进一步学习的内驱力。同时,需要不断跳出自己所在的舒适圈,在好奇心的驱使下接触到更多领域的相关知识。可以说,是热爱和好奇心,造就了我“不同寻常”的算法学习道路,也为我带来了意义非凡的收获。

