竞赛含金量
USACO是美国国家级别竞赛,目的就是为 IOI(国际信息学奥林匹克竞赛)和 ICPC(国际大学生程序设计竞赛)输送人才。
随着STEM教育的理念,及编程低龄化,普及化的发展,USACO的参赛人数和热度越来越高。因为编程的门槛相比数理化学习较高,USACO难度和含金量实际会略高于同类型的USAMO(美国数学奥赛),USNCO(美国化学奥赛)等等学科奥赛。
此外,因为大量的学生参加热门的USAMO, USNCO等竞赛,所以USACO相对来说并不是过分红海,在中国的高中生中普及度并不高,换言之,参赛选手少了,获得荣誉的人少了,含金量自然更高。
对于美本申请工程学科的高中生,USACO能够获得金或者白金级别的奖项,是提高竞争力的大杀器。
USACO非简单编程语言翻译,而是接受一个编程项目,独立思考相关知识点(数学逻辑、数据结构、算法、计算机体系结构、英语理解等),运用各种能力(计算思维、资料收集、刻意练习)设计并实现,验证正确性,反复迭代修正。整个流程在普通学制中难有训练机会,对于参赛选手独立解决问题的能力提升非常有帮助。
竞赛形式
USACO为个人赛,学生在网上报名,在该次月赛指定的时间范围(4天)中的任何一个时间打开题目,一次比赛持续3-5小时,需在规定时间内完成3道题目,总分为1000 分,选手需要在时间结束前通过网络将写好的程序提交。
程序提交后官网会给出用test case检测程序的结果,并根据结果给出这一题的得分。可以使用C++、Java、Python、Pascal和C中的任意一种编程。比赛对于程序的大小,运行需要的内存以及运行的时间都有一些具体规定。
USACO分铜、银、金和铂金4个组别,难度依次递增。
青铜级别比赛
参赛资格:一进入USACO注册账号即为铜级
难度等级:铜级考试只要基本编程常识,会至少一种编程语言。铜级的编程限制时间还是够用的,大部分初次参赛的选手都能在次考试中晋级白银级
考点:主要是考察编程掌握程度,排序、二分查找
白银级别比赛
参赛资格:通过青铜级比赛的选手
难度等级:需要基本的问题解决能力和简单算法(例如:贪心算法,递归搜索等),还需了解基础数据结构。从白银级开始,选手需要寻找更好的算法才能使程序在规定时间内跑完
黄金级别比赛
参赛资格:通过白银级比赛的选手
难度等级:需要有一定的算法基础,理解一些抽象的方法(例:最短路径,动态规划),并且对数据结构有比较深的了解
白金级别比赛
参赛资格:通过黄金级比赛的选手
难度等级:需要有很高的编程基础,对算法有深入的了解。部分比赛问题最后的优化方案,可能不只一个,得出的答案也不只一个
竞赛时间
比赛时间节点每年都不一样。每届的第一场开赛时间都是在12月左右,今年的比赛时间目前还没有出,可以参考去年的比赛时间。只要在前三场比赛中升到白金就可以参加全美公开赛。
12 月 17 日至 20 日
第一场比赛
1 月 28 日至 31 日
第二场比赛
2 月 25 日至 28 日
第三场比赛
3 月 25 日至 28 日
美国公开赛
5 月 26 日至 6 月 4 日
训练营
8 月 7 日至 14 日
IOI 2022 在印度尼西亚
竞赛报名步骤
注册账号
登录USACO官网
http://usaco.org/index.php
点击Register for New Account按钮,注册新账户
填写信息并激活账号
注册结束后,在绑定的邮件中查收自己的账号和默认密码。并如下图登陆官网(24小时内首次登陆方可激活,登录后可修改密码),并点击“Login”
开始比赛
选手需要在比赛开放期间进入竞赛页面参与比赛。点击“Start the Contest!”键即可开始比赛。选手的比赛用时就会立即倒计时,且无法暂停。题目语言可切换为中文。
提交答案
完成之后就可以提交啦!比赛时需要按要求在自己的编程环境(例如DEV-C++)中完成题目,并提交cpp文件。
比赛会在时限过后自动结束(如已经获得满分,则可以手动提前结束),只需在比赛结束前确保提交过已经完成的题目即可
官方习题库
官网上有一个训练题库(https://train.usaco.org),可以登陆这个题库并进行注册,这个网站和USACO官网的注册是分开的,需要独立注册,可以这上面进行训练。
同时,在官网上还能查看历年真题(http://usaco.org/index.php?page=contests),可以做一下这些题目,对题目的类型有一个基本的了解。当然,上面提到的这些都是考前的准备,但USACO的相关编程知识,还是要找一个老师好好学习下,掌握了算法和编程基础知识,才有可能在竞赛中获奖。
经典例题
2020USACO铜组第1题
一种新型疾病COVID-19开始在全世界的奶牛之间传播。John 正在采取尽可能多的预防措施来防止他的牛群被感染。
John 的牛棚是一个狭长的建筑物,有一排共 N 个牛栏(2≤N≤105)。有些牛栏里目前有奶牛,有些目前空着。得知“社交距离”的重要性,Farmer John 希望使得 D 尽可能大,其中 D 为最近的两个有奶牛的牛栏的距离。例如,如果牛栏 3 和 8 是最近的有奶牛的牛栏,那么 D=5。
最近两头奶牛新来到 John 的牛群,他需要决定将她们分配到哪两个之前空着的牛栏。请求出他如何放置这两头新来的奶牛,使得 D 仍然尽可能大。
John 不能移动任何已有的奶牛;他只想要给新来的奶牛分配牛栏。
2020USACO银组第2题
John 的奶牛们的早餐最爱当然是麦片了!事实上,奶牛们的胃口是如此之大,每头奶牛一顿饭可以吃掉整整一箱麦片。
最近农场收到了一份快递,内有 M 种不同种类的麦片(1≤M≤105)。不幸的是,每种麦片只有一箱!N 头奶牛(1≤N≤105)中的每头都有她最爱的麦片和第二喜爱的麦片。
给定一些可选的麦片,奶牛会执行如下的过程:如果最爱的麦片还在,取走并离开。
否则,如果第二喜爱的麦片还在,取走并离开。
否则,会失望地哞叫一声然后不带走一片麦片地离开。奶牛们排队领取麦片。对于每一个 0≤i≤N−1,求如果 Farmer John 从队伍中移除前 i 头奶牛,有多少奶牛会取走一箱麦片。
辅导课程
常规班:40课时
计算机科学入门
USACO(铜级 升 银级)40小时
USACO(银级 升 金级)40小时
USACO(金级 升 铂金)50小时
USACO (铂金 升 夏令营)50小时
教学大纲
每个级别培训课都是,十个单元,上课内容如下,可选择PYTHON或者JAVA或者C++。