滑铁卢大学-计算机CCC竞赛全面剖析+备考建议
Canadian Computing CompetitionCCC竞赛简介
Canadian Computing Competition (CCC) 是由加拿大滑铁卢大学举办的、面向全球高中生的计算机竞赛,比赛时间一般在每年的二月中旬。今年的考试时间在2月15日。
CCC竞赛主要考查同学们熟练使用计算机编程语言以及数据结构和算法解决问题的能力,需要同学们在保证正确性的基础上极可能地去提升程序的运行速度。
CCC竞赛分为两个难度:Junior(初级)和Senior(高级)。Junior 和Senior的CCC竞赛各自都由5道题组成,每道题15分(大部分题有部分分-partial marks),总时长是3个小时,并且,这5道题的难度是从低到高逐题增加。
CCC竞赛难度
整体来说,Junior CCC 竞赛比较适合计算机编程的初学者来参加,比如10年级的同学。前三题,Junior的竞赛侧重基础的编程语言的使用,后两题则会涉及到一些简单的数据结构和算法。
从CCC竞赛历年的真题来看,Junior比赛的最后两题的难度和Senior比赛前两题的难度相当,甚至其中一题会是完全相同的。
Senior比赛,后三题会逐渐提高难度,需要更复杂的算法和数据结构以及更多的数学思维能力,考查的方向更偏向于竞争性编程(Competitive Programming),最后一题会与国际信息学奥林匹克竞赛(IOI)的难度相当。所以,Senior CCC比赛一般推荐11-12年级,且准备得比较充分的同学们参加。
CCC竞赛总分是75分,排名前25%的同学会被授予Certificate of Distinction。根据往年的数据,Junior CCC前25%的分数线大概在55 - 60分之间,Senior CCC前25%的分数线大概在30 - 35分之间。
从获奖分数线的划分也不难看出,CCC的考察是有一定难度的。所以,有就读计算机科学和工程类的专业打算的同学,一定要尽早接触编程,打好基础,并且规划好参与竞赛的学习时间,确保自己能够在申请大学之前就拿出一个这样含金量高的计算机类竞赛奖项。
CCC备考注意事项
1、选择合适自己的编程语言
想要在CCC竞赛中取得一个好成绩,首先要保证编程的熟练程度,所以同学们第一步要做的是根据自己的目标目标和背景选择合适的编程语言。
2、大量编程练习以保证熟练度
由于CCC竞赛是一个有时间限制的比赛,同学们需要迅速准确的用编程语言实现自己的想法,也要尽可能的减少错误,因为一个小小的bug可能会浪费很多的时间,所以同学们在课外一定要有足够的练习量确保熟练度。
3、关于选择和评估编程语言
在CCC竞赛中,同学们可以使用绝大多数的编程语言来解题,通常的选择有Java,C++和Python。其中,Java和C++是可以确保获得所有题目的满分的,而Python在Senior的最后三题有时可能只能获得一部分分数。但是,由于Python易学易写,不容易出错,不像难一些的语言(如C++)一样容易在某些地方卡住导致整题失分,所以也是考生们非常常见的编程语音选择。
4、注意系统性的数据结构和算法学习
CCC竞赛,尤其是Senior CCC,非常侧重于对于数据结构和算法的考查,因此系统性的针对数据结构和算法的学习是非常重要的。
由于CCC的往年考题都是公布的,在学习的过程中也要搭配对应的CCC真题或者典型题目来针对性的练习。CCC算法部分的内容是滑铁卢大学的大二大三的计算机科学算法课程的下放,对于高中生来说掌握有难度。另外,CCC的内容在平时学校的大部分课程里是不包括或者极少会涉及的, 要特别花专门的时间去学,否则备考会遇到障碍。
5、明确参赛目标,制定适合自己的策略
在对CCC的考题难度和范围有一定了解后,同学们需要明确自己的目标,首先问自己:考试中大概哪些题目是我能做出来的?一个比较推荐的考试策略是花更多时间在你能做出来的题目上,尽量保证拿到满分,对于不能完美解决的题目,可以快速写一个能得到部分分数的解法。
另外,同学们要明确自己的理想分数: 要达到这个分数大概要做对几道题?比如,如果要在Senior比赛中获得35分,可以把目标定为:在前两题中尽量拿满分,后面的题目中尽量多拿部分分数(Partial Marks),同时要减少可能出现bug的概率。
计算机学习资源推荐
DMOJ 网站
https://dmoj.ca/problems/?search=CCC+
这个网上有历年CCC的真题,并提供了一个和正式的CCC考试非常像的Online Grader来打分,同学们可以用这个网站的资源刷题和监督自己的学习进度。
更多适合高中生备考CCC的免费学习资源推荐可以扫码文末咨询老师!
给高中生的规划建议
1. 掌握至少一门编程语言,达到熟练
不管是在校外找专业的竞赛老师培训上课还是自学,平时一定要多动手写代码,保证至少一门编程语言的熟练程度!
2. 多动手写代码
学习编程不像数学等理科学科,在知识学习之外一定要注意实操,要上手做一些项目(Projects),还是那句话,要多动手写代码!
3. 多学习对数据结构和算法
前文也提到过,数据结构和算法对于考CCC十分重要!它们也是以后同学们实习和全职面试的考察内容重点(实习和校招面试占比为70%以上)。
在高中阶段打好这方面基础,有助于在计算机领域赢在起跑线上,在申请大学阶段以及找实习、毕业找全职都有好处。可不要考完了就扔到一边哦!