湖南大学吕乐在第32次CSP认证考试中获得405分,第33次CSP认证考试将于3月31日举办。每年CSP高分考生(200分及以上)均可报名参加CCSP竞赛,CCF不定期邀请CSP高分和CCSP获奖选手分享经验,希望能够帮助同学们取得更大的进步。
非常欢迎更多CSP优秀学子分享自己的宝贵经验,联系:csp@ccf.org.cn
参加CSP的体会
2023年12月我参加了第32次CSP认证,这是我第一次参加,之前在CSP官网上做过一些真题。CSP的题目比较考验代码实现能力,需要较好的基本功,快速Debug的能力,不能够在大模拟题上卡太久。
第一题是最简单的一道题,照着题目意思写就可以了。
第二题往往需要一点点技巧,这种技巧不是指什么高深算法,而是一些数学上的分析,或者计算策略的分析。
举个例子,三个矩阵依次相乘,大小分别为1000*100,100*1000,1000*100。如果啥也不想,就是顺次相乘,这样总时间就是2*10^8,就超时了;但是如果能想到矩阵乘法满足结合律,先乘后面的,这样的时间复杂度是2*10^7,就通过了。
吕乐成绩单截图
第二题就是类似这种简单的分析和优化,不会涉及复杂算法。想拿满分,需要对数学性质,计算方法之类的小技巧敏感一些,只要平时保持刷题的习惯,积累的技巧就可以在考场上尽情发挥了。练习的话多做一些简单的动态规划、组合计数、贪心之类题目,不用做太难的,主要是积累思路。
第三题一般也不需要复杂算法,主要考实现。做第三题首先要认真读题,不要被老长的题面吓到,花个5-10分钟认真读一遍,并按照样例模拟一下,思路就出来了。
至于想拿满分,就要看程序写的是否优美,代码是否写的简洁。这个就没有任何捷径可言,平时要多写一些代码量稍大的题目,比较好的练习就是树、图论搜索之类的题目。把基础搜索,遍历熟练运用,那么第三题其实拿满分不难。当然,在学一些模版的时候,一定要理解并选择一个自己认为最简洁的写法,这样能够节省很多时间,同时避免各种错误。
至于第4题和第5题,这两题是偏向oi竞赛的题了,属于难题。不过难题指的是拿满分难,拿到部分分其实不难,如果每题拿到50分,那总分就上到400分了。或者第三题没有写到满分,就可以靠第4题和第5题拿一点分。一般都会有类似第二题难度的部分分,或者直接暴力的部分分,两题拿到30分是比较容易的。考场上这两题我都没写满,分别拿了50分和55分,最后总分就到了400+。
想要突破400分的话,就需要学习oi竞赛知识,或者参加ACM训练,学习更多的硬核知识。总之拿400分不那么容易,需要较好的编程功底,良好的比赛心态,还要能够沉得住气去写长代码和耐心地去Debug。
我的日积月累
对于日常的训练,我比较喜欢打codeforces,上面的思维题比较多,能够学到很多巧妙的思想和各种快速计算的方法。不要太在意分数,我从来都是当做打游戏排位去打cf的,上分掉分都是很正常的,关键在于一场比赛能够新学一个算法或者新体会一种思路,这是很关键的。日积月累就能够轻松拿到CSP第1、2题满分。
第二个就是洛谷,洛谷上面分类齐全,各种题目都有,并且有很多模板题,经典题,很值得去刷一刷。想练模拟就去做模拟大题,独立做出来一题比光看10题要强。能够把洛谷“提高”难度的模拟题做出来,CSP第三题就能很快写出来了。如果能经常做出“省选”难度的题,那CSP第四题或第五题拿满分也是可以的。刷题没有捷径,每做一题就是积累一种算法或者一种思路。量上去之后,就会发现,面对复杂问题的时候你会比其他人思路清晰,知道每一步该做什么,这是一种很重要的能力,无论是计算机专业学习还是其它专业课学习都很有用。
最后一点就是,学编程一定要学好数学。oi的目的就是要花更少的时间,占用更少的空间去解决问题。如何优化算法,靠的就是数学。无论是组合数学、计算几何、时间复杂度分析、累次求值、拆分元素计算贡献、数论等等板块,都需要良好的数学功底作为基础。大学期间起码高等数学,线性代数得学好,外加一些数论、离散,至于复变、泛函,学得会也可以学。
结语
来到湖南大学,我加入了ACM俱乐部,认识了一些来自不同专业,一样热爱编程的同学,我们经常在一起在线比赛,赛后讨论,分享心得。湖南大学信息科学与工程学院的同学说,他们学院的本科生都会参加CSP,通过CSP官网了解得知:CSP每年有四次,参加CSP高校和人数挺多的,拿满分的也不少。这一年多,刷的题也不少,但对刷题效果还是没有底,于是报名参加了CSP。CSP结果告诉我,这样刷题还是挺有效的,我会继续保持编程热情,也会继续参加CSP。感谢CCF提供这样的评测机会,希望更多同学参加CSP,取得优异成绩!