CCSP金奖说 | 西北工大龚熙尧:CCSP2024冠军经验分享
西北工业大学龚熙尧在2024 CCF CCSP竞赛中获得全国冠军,每年CSP高分考生(200分及以上)均可报名参加CCSP竞赛。第36次CSP认证考试将于12月8日举办,报名正在进行中。CCF不定期邀请CSP高分和CCSP获奖选手分享经验,希望能够帮助同学们取得更大的进步。
非常欢迎更多CSP优秀学子分享自己的宝贵经验,联系:csp@ccf.org.cn
一、缘起NOIP
刚开始接触程序设计是在初中,那时候第一次了解到全国青少年信息学奥林匹克联赛,也就是NOIP,也是在那时第一次了解到中国计算机学会(CCF)。一开始我并没有进行深入的学习,只是略感兴趣,觉得编程解题很有意思,并参加了NOIP的普及组,不过那时,我还没有明确的目标。在进入高中之后,高中学校提供了算法竞赛的课程,在进一步学习之后,我明确了自己的目标,希望获得NOI金牌,并充满热情地向这一目标努力。我付出了很多时间与精力,学习知识并练习解题,终于进入了省队,参加NOI。但很可惜的是,我高中两次参加NOI都只获得了银牌。
备战NOI的时间无疑对我是一段难忘的时光,尽管没能达成目标,但那仍是令人愉快的一段记忆,我很感谢CCF提供的竞赛环境,也感谢高中教练和同学的帮助。
二、结识CCSP
进入大学以后,我加入了学校的ICPC基地。在这里,我了解到了CCF主办的CSP认证,于是我参加了第31次CSP认证。CSP认证使用的是IOI赛制,这一赛制中可以看到实时得分,并且多次提交没有惩罚,这一赛制可以更好的帮助我们验证代码的正确性,不必过分纠结于此,为我们节省更多时间在代码的设计上。在这场认证中,我获得了满分500分,令我印象较为深刻的是第五题,给定一棵带边权的树,多次修改一条边的边权,求直径,这道题并不简单,需要使用数据结构来进行维护,我选择使用静态的Top Tree进行维护,成功通过。很巧的是,我参加的第二场NOI中就有一道需要使用静态Top Tree的题目,当时我不会做,没能获得多少分数,这大概也是某种缘分吧。
之后,我又了解到了CCSP竞赛,于是我前往沈阳参加了2023年的CCSP,比赛题目的形式对我而言十分新颖,是3道比较经典的算法题+2道工程题,比赛时长是12小时,有着较为充足的时间来实现代码。不过由于是第一次参加,经验有些不足,只获得了银奖的成绩。
三、再遇CCSP
今年在浙江金华第二次参加CCSP竞赛,这次我做好了时间规划,更加从容地应对题目。本次的前两题都较为简单,我很快就做完了。第三题是一个经典的问题,可以在转化后变成三维数点问题,简单地说,通过离线所有操作,可以把插入变为单点修改,而查询区间内的颜色数可以转化为查询上一个同色点位置小于左端点的点数,单点修改只会对常数个位置的“上一个同色点位置”造成影响,因此问题转化为三维数点(点出现的时间,点的下标,上一个同色点位置,一共三维)。类似的转化我以前曾见过,于是也很快写完了。三道算法题做完,接下来的两道题,题面很长,代码量偏大,不过好在大多数内容只要按题面给出的信息去做,想出合理的实现方式,一点一点慢慢写就能写出来,时间还是比较充裕的。值得一提的是,第五题需要求解一个任务调度的最小代价,将线程看做点,有锁竞争的线程之间连边,这个代价就是求解一个无向图的全局最小割,需要使用相关算法进行求解。
在做完所有题后,我看了下榜,很惊讶自己竟然是第一个做完所有题的,获得了第一名的好成绩,我想我也算是一定程度上弥补了NOI没拿金牌的遗憾吧。
2024 CCF CCSP颁奖典礼
四、备赛建议
首先,基础的代码能力是重中之重,对于一个算法,如果代码能力不合格,哪怕对算法的理解再深刻也是难以给出实现的,更何况CCSP的后两题考察的主要就是针对给出内容的实现的考察。因此,CCSP竞赛中,代码能力是尤为重要的。这一方面要求我们要有将语言描述转化为代码的能力,另一方面要求我们熟练掌握编程语言,例如熟练运用C++中的STL,这可以有效帮助我们实现代码的简化。
然后是对于算法的学习,平时可以积累各种算法知识,这样在面对一个问题的时候,可以第一时间反应出应该使用的算法。例如,本次比赛的第三题在转化后是一个三维数点问题,这可以使用分治解决,再比如,第五题的全局最小割,可以使用Stoer-Wagner算法或者最大流解决。另外,专业课的学习也是重要的,通过专业课知识,我们可以更好地、更简单地理解系统题的题意。
最后是对于技巧的练习,算法题有着各种转化题意的技巧,这些技巧需要在日常练习中积累,这就需要选手长期坚持不懈的在各种OJ上做题打比赛,然后对见到的题进行分析并积累其中可以用到其他题的技巧。
五、结语
我很感谢CCF为我们提供了CCSP这么好的比赛舞台,这次比赛的经历是我一次宝贵的体验,希望之后还能有更多这样与大家交流竞技的机会,也希望CCSP越办越好。