USACO(UnitedStates of America Computing Olympiad,美国计算机奥林匹克学术活动)是美国最具认可度的计算机学术活动,面向全世界所有的高中信息学学术活动选手。这个比赛开设目的是为了每年夏季举办的国际信息学学术活动(IOI),选拔美国队队员(4名),相当于国内的NOIP比赛。
国内的NOIP比赛主要以线下组织为主,基本上都是以学校为单位进行组织的。而USACO则是以线上为主,学生可以直接在网上报名,并在线进行解题。
含金量几何
随着STEM教育理念,及编程低龄化、普及化的发展,USACO的参赛人数和热度越来越高。而编程的门槛相比数理化学习较高,USACO难度和含金量实际会略高于同类型的USAMO(美国数学奥赛),USNCO(美国化学奥赛)等学科奥赛。
对于未来美本留学申请理工科专业的高中生来说,USACO能够获得金或者白金级别的奖项,绝对是提高竞争力的大杀器。
以下是Quora(类似于知乎)上关于USACO等级对应的数学奥林匹克学术活动等级,很多偏理科的大学都会要求AIME(美国高中数学邀请赛)成绩,如果你有对应的USACO成绩,大学也是认可的。
从美国大学录取规律来看,分量最重的比赛还是USACO,USAPHO,以及中国的官方奥林匹克学术活动(如NOI)。
USACO参赛要求
这个比赛对参赛者没有什么国籍要求,高中生都可以参加,只要在官网上注册成功即可。最好一定要有编程语言的基础。参加比赛是不需要任何报名费的。
比赛可以接受的计算机语言有C++、Java、 Python、 C、 Pascal。
比赛规则
USACO每场比赛4-5个小时。可以在比赛规定时间开始后登陆USACO账号,从在线打开试题后开始计时。一套试题中有三道题。选手需要在时间结束前通过网络将写好的程序提交,程序提交后官网会给出用testcase检测程序的结果,并根据结果给出这一题的得分。可以使用C++,Java,Python,Pascal,和C中的任意一种编程。比赛对于程序的大小,运行需要的内存以及运行的时间都有一些具体规定。
每次比赛,实力强的选手可以连续升级。在比赛窗口开放的三天时间内,选手可以选择任意时间开始比赛。开始比赛4小时内,如果拿到了高分(接近满分或满分),系统会提示直接晋级,可以在这三天内继续挑战下一级,只要实力足够,理论上一场考试可以升到满级白金级。没能拿到满分的选手需要等到三天的赛程结束后,等待晋级分数线,才能决定是否晋级,如果成功晋级,可以在一个月后的第二场继续参赛晋级。
比赛时间
月赛:一般是每年12月开始进行,会选择四个周末举办主要的比赛,从周五到周一,在这个时间段内学生可以选择在任何时间比赛,通常来说每次学术活动的时间为4个小时,但有时候是3个小时或者5个小时
公开赛(US Open):每年4月举行,题目比月赛要难。成绩优异者可获得参加USACO训练营的机会。(达到白金组可参加)
等级
青铜
参赛资格:一进入USACO注册账号即为铜级。
考核知识:基础数组、多重循环、复合判断、枚举算法。
难度等级:铜级考试只要基本编程常识,会至少一种编程语言。铜级的编程限制时间还是够用的,大部分初次参赛的选手都能在第一次考试中晋级白银级。
白银
参赛资格:通过青铜级比赛的选手。
考核知识:基本数据结构,贪心、递归、递推等基本算法。
难度等级:从白银级开始,选手需要寻找更好的算法才能使程序在规定时间内跑完。
黄金
参赛资格:通过白银级比赛的选手。
考核知识:堆、栈、树、链表等高级数据结构,动态规划等高级算法,算法时间和空间复杂度。
难度等级:需要有一定的算法基础,理解一些抽象的方法(例:最短路径,动态规划),并且对数据结构有比较深的了解。
白金
参赛资格:通过黄金级比赛的选手。
考核知识:各类高级数据结构,尤其是算法的时间和空间复杂度。
难度等级:需要有较高的编程能力,对算法有深入的了解。部分比赛问题最后的优化方案,可能不只一个,得出的答案也不只一个。
如何准备
官网上有一个训练题库(https://train.usaco.org),可以登陆这个题库并进行注册,在这上面进行训练。同时,在官网上还能查看历年真题,做一下这些题目,能对题目的类型有一个基本的了解
备考指南:
1没有编程基础的同学
建议从Python或者Java入手,上手较快。学习主要内容为数据结构,编程语法,配合一定强度的练习和老师讲解,可以初步通过第一轮铜级的选拔。
2有编程基础的同学
比如在读AP计算机的高一高二同学,或者学习过Python的同学,可以从C/C++或者Python入手,学习算法知识,加强算法练习和真题训练。
3有相关参赛经验的同学
参加过国内NOIP的同学,目标肯定是冲击金级别及以上的奖项,在有数据结构和编程语法基础的前提下,需要系统的学习一些常见算法,比如排序等等。同时大量练习官方的金、白金级别的真题。
选择什么语言:
这是USACO官网的统计数据,可以了解到参加学术活动人员所使用的语言排名为:C++> Java > Python > C > Pascal。
作为编译型语言C++的运行速度一定是完爆解释型语言Python的,尤其是usacogateway里面有几道题python基本不可能不TLE(TimeLimit Exceeded即时间超限)。但是正式比赛的时候python是2秒的最大时间,c++只有1秒,所以同样的算法会是差不多的分数。
另一方面Java是AP计算机专业课程中指定的编程语言,因此对于准备留学,要读AP课程的学生来说,Java是一个不错的选择,不仅能够参加USACO考试拿到背景提升证书,还能抵扣大学的学分。
至于C和Pascal作为旧时代的残党已经可以忽略不计了。总的来说选择自己熟悉的语言即可,而初学者或零基础者建议使用JAVA,夯实基础就是它最大的优点。
© 2024. All Rights Reserved. 沪ICP备2023009024号-1