返回首页
您的位置:首页 > 新闻 > 专题 > CSP群英榜

CSP高分说 | 曲阜师大王佳琪:算法兴趣源于初中游戏经历

阅读量:4 2024-03-07 收藏本文

曲阜师范大学王佳琪在第32次CSP考试中获得435分,第33次CSP考试将于3月31日举办,报名已于3月4日开启。每年CSP高分考生(200分及以上)均可报名参加CCSP竞赛,CCF不定期邀请CSP高分和CCSP获奖选手分享经验,希望能够帮助同学们取得更大的进步。


图片

非常欢迎更多CSP优秀学子分享自己的宝贵经验,联系:csp@ccf.org.cn



相识CSP

我从初中开始接触编程,起初使用易语言,由于缺乏专业指导,只能独自摸索。在这个过程中,我对计算机如何执行任务充满了好奇,特别是有一次玩游戏时,我对游戏中角色的移动路线产生了浓厚的兴趣,这促使我去探索背后的机制。经过网上查阅资料,我了解到了A*寻路算法,这是一种在有障碍的2D或3D环境中找到一条从起点到终点的最短路径的高效算法。这一经历极大地激发了我对算法和编程的兴趣,为我后续在计算机科学领域的学习埋下了种子。


大一入学后,我加入了学院的ACM算法实验室。在师哥们的指导下,我完成了100道入队题,提高了我的C语言能力和对算法的理解。尽管一个学期后我离开了ACM实验室,加入了CTF网络安全实验室,专攻开发与安全方向,我始终未忘学习算法。当听到原来的ACM队友李政德提到CSP时,我怀着好奇心和学习欲望,抱着旅游的打算与他一同前往南京参加了CSP认证,开启了我的CSP旅程。


我不是ACMer,初次参与CSP时由于缺乏参赛经验和准备不充分,只获得了240分的成绩,与同场考试的李政德相比,他取得了320分的优异表现。随后,通过更充分的准备,我在第二次CSP中取得了300分的成绩,显示出了明显的进步。而经过不懈努力,第三次CSP的成绩更上一层楼,达到了435分,打破了学校的记录。这一过程不仅展示了我的学习能力和应对挑战的韧性,也为未来更高水平的竞技和学术探索打下了坚实的基础。


CCF带给我的收获和感悟不仅仅停留在认证考试上,更贯穿于求学路上的方方面面。在CCF的熏陶下,我逐渐培养起对创新思维和持续学习的热忱。通过与CCF共同成长,我深信科技的力量能够改变世界,而CCF则为我们搭建了实现这一目标的坚实平台。   

图片
图片
图片

CCF-CSP认证成绩单



赛制与题型

CCF CSP认证考试共有5道题目,比赛时长4小时。考试采用IOI赛制,选手可多次提交答案,每次提交后获得反馈结果,可以看到自己通过的测试点数量,多次提交取最高分。


第一道题目为语法题,报名参加这个考试的选手一般都问题不大。


第二道题目可能涉及一点基础算法,如果没有接触过算法的同学“暴力”也能拿到大多数的分,想要拿到满分需要学习一点算法基础,如:前缀和二分查找等。 


第三题大多不涉及算法,但是题面很长,属于”模拟题”,非常考察思维能力和编程功底,需要在考场有限的时间中建模并反复编程、调试,要求平时积累大量的经验。这道题目是整场考试的关键,如果比较顺序可以为后两道题目争取时间。反之,如果在这道题卡住太长时间,做后面的算法题时可能心态受到影响且时间不足。


第四题和第五题则是比较困难的算法,难度接近OI/ACM竞赛,通常涉及树、图、动态规划等,需要熟悉并理解常见算法,灵活运用算法模型解决问题。



备考CSP经验

备考CSP过程中,我注重构建学习计划。


首先,深入理解考试大纲,明确知识点权重,有助于有的放矢地进行学习。在保证前两道题不失误的情况下,有针对地进行学习。例如:CSP的第三题需要大量训练模拟题,培养建模思维,而第四题和第五题需要学习算法进阶知识。


其次,构建系统性的学习计划。基础阶段要掌握栈与队列、递归、树、图、贪心算法、线性动态规划算法,进阶阶段要学习多级反馈队列、AVL树、B/B+树、红黑树、线段树、复杂动态规划等难度比较大的算法。


最后,通过大量做题,注重对各类题型的熟悉度和解题技巧的掌握。这有助于提高解题效率和逻辑思维能力。同时,参加模拟考试,锻炼时间管理和应试心态。CSP官网提供了免费的模拟考试系统,可以做历届CSP认证考试的真题。


图片

CCF认证考试模拟系统



如何高效学习

除了以上三点备考经验,我还想分享几点学习习惯。


第一,要保持对算法的热情,不能功利性的学习算法。热爱才能享受,兴趣驱使高度专注,专注才能高效。


第二,不要惧怕失败。这里引用电影《飞驰人生》的一句话——“一直努力就会有机会吗?不是的,我努力过无数次了,但我知道,机会只会出现在这其中的一两次”,失败是成功之母,如果总是依靠运气侥幸取得高分,永远不会获得进步。


第三,要知其然知其所以然。经常有人问我,为什么要学习底层原理,比赛中我能写出来算法模板,开发中能实现CURD不是已经完全足够了吗?无论是算法还是开发,我都建议了解底层原理,不能停留在表面,成为”公式人”。学C要理解汇编和系统底层,学Java要研究JVM,学算法要明白算法思想。对于算法,不仅要学习算法模型,熟练掌握模板。更要学习算法的原理,只有真正理解了算法原理才能感受算法之美,才能灵活运用,举一反三。当你学完底层原理再回头看现在的难题会迎刃而解。如果能够坚持刨根问底地去学习,随着时间的流逝,你会发现所学的知识都是融会贯通的。这样会逐渐提高学习能力和文档阅读能力,在更深层次的学习中事半功倍。


第四,要深入学习,同时不要忘记广泛学习。经常有人会问我xx方向需要学习算法吗?我都毫不犹豫的回答:一定要学!我认为程序员有五个阶段:


第一阶段:代码跑不起来,依赖百度+CSDN。


第二阶段:开始看视频教程,停留在CURD的水平,疑难杂症无力解决。


第三阶段:开始了解底层,发现全是数据结构、算法、操作系统和计算机网络,开始沉迷底层技术,追求最优解决方案。


第四阶段:知道一些底层原理,开始跟别人探讨技术优雅性,忽略了技术的目的是为了带来收益。


第五阶段:灵活判断业务,给出合理技术架构。


相信很多科班出身的同学都会学到数据结构和算法,但是你在学习的时候可能感到这些知识无用、过时,你更青睐于学习立竿见影的编程语言、项目开发,但当你到达技术瓶颈时你会发现底层全是数据结构和算法,又回过头来狂补基础知识。所以,我建议大家要保持对各项技术的热爱与坚持不懈的学习,更何况算法是程序员的基本功,需要我们终身学习。



写在最后

在算法方面,我可能比不上ACMer大佬们,但在我的学习旅程中,算法和数据结构一直是我追求的目标。通过CSP认证,我不仅在竞技编程方面有了更深的认识,还培养了解决实际问题的能力。CSP作为一个学习和交流的平台,让我结识了众多志同道合的同学,也深刻感受到算法爱好者们的温暖与活力。


无论是作为一个全栈技术爱好者,还是在开发与安全领域的探索,我始终坚信算法是程序员的基本功。不仅要掌握表层的知识,更要深入理解背后的原理。这不仅让我在解决实际问题时得心应手,也拓展了我的技术视野。


感谢CCF为我们提供了这样一个学习的平台,也感谢一路相伴的师友,让我的算法之旅更加丰富多彩。未来,我将不断探索技术的边界,为计算机科学领域贡献自己的一份力量。让我们共同努力,探索更广阔的编程世界!