美国计算机奥林匹克竞赛(USA Computing Olympiad,简称USACO)是一项为初高中生或者年龄更小的学生提供的顶尖在线竞赛。首次举行于1993年,旨在锻炼学生用计算机编程解决问题的能力,至今已有29年的历史,是美国极具认可度的计算机赛事。
其官网是美国中学生的官方竞赛网站,同时也是美国有名的在线题库,是专门为信息学竞赛选手准备,旨在为每年夏季举办的国际信息学奥林匹克竞赛(IOI)选拔美国队队员。这个题库可以说是全世界知名的,别的国家,包括咱们中国引进/改编原题的大有人在。
1、竞赛流程
USACO和其他的竞赛形式略有区别,主要采用评级制度,整体被分为青铜级、白银级、黄金级、白金级四个等级。学生有两种晋级的形式,第一种是在每月月赛当中在当级的测试中考到1000分满分,那么就可以直接晋级到下一个等级,并且可以继续朝着高级进发。第二种则是在每月月赛结束时,获得的测试成绩超过晋级分,即可晋级到下个阶段。
2、赛事形式
USACO的赛事会提供给考生3道考题,学生需要根据考题的提纲编写对应的程序算法。考试结束并提交后,系统后台会基于考生的答案测试全部的testcase并给出反馈。考生可以看到testcase的测试结果,但是却没法直接看到具体的testcase内容。之后学生在月赛赛事窗口开放期间可以反复递交自己的答案,直到赛事窗口关闭或者拿到满分1000分。
2022-2023届USACO考情分析
1、编程语言
USACO并没有硬性要求参赛选手一定要使用某种编程语言,C++、Java、Python都是可以选的编程语言之一。 但选手在选择参赛使用的编程语言时却有比较明显的差别:
不难发现,C++类型的编程语言是所有编程语言当中最受欢迎的一类,整体使用的人数比起Java和Python的选手多出了一倍都多。 这得益于C++本身强大的性能,也为我们提出了一个指导意见,就是如果我们打算要学习编程语言,学习最多参赛选手都在使用的C++,或许是一个比较好的选择。
2、2022-2023赛季参赛人数与晋级线
我们同样统计了2022-2023赛季各赛事的参与人数,以及对应的晋级分数线。
由于同一等级的考生,可能会连续场赛事都在挑战晋级,因此实际上USACO的晋级比例,会比起我们表面上感觉到的要低很多。这一点尤其在黄金和白金级最为明显。
虽然晋级比例并不是每一年都有披露,但从已披露的年份来看,每年的晋级比例基本维持稳定。 最近一次有披露晋级比例的21-22赛季的第一场月赛(12月赛)显示,能从青铜级晋级到白银级的选手数量大约在15%。
而从白银级能够晋级到黄金级的只有12%。
结合起来一看,其实从青铜级能够晋升到黄金级的选手数量就只有1.5%-3%左右了。 而能够晋升到白金级的选手就更少了,基本上在每场赛事中,只有100名左右的黄金级选手有机会晋级到白金级。
除此以外,晋级的分数线每年也基本都控制在700-800分之间,这意味着基本要完整答对2道半的题目,才有机会晋级,这对于许多同学来说也是有一定的难度的。
如何备考USACO?
1、针对12年级的同学
针对有较强编程能力的同学,可以争取在12月的月赛中,直接晋级到黄金或铂金,对于12月RD的申请也是非常有利的背景活动。
对于编程能力一般的同学,建议从python或者java入手,上手较快,可以争取拿到白银及以上的等级。
2、针对11年级的同学
11年级的最佳的备赛时间,是从现在开始就进行备赛准备。
如果今年是首次参赛,又没有提前做过备赛准备,现在准备还是有机会的。可以在12月全心备赛,争取在明年1-2月的两场月赛中打到白银及以上的等级。如打算为美国的RD做准备,也可以在明年12月的比赛中,继续冲刺更高等级。
而如果是在去年就已经有参加过USACO并拿到了白银级的同学,则可以赛学结合,多学点算法、数据结构的内容,大量刷题训练,争取在明年1-2月的月赛中,拿到黄金及以上的等级。
3、针对9-10年级的同学
理论上来说,9-10年级是最佳的备赛年级。针对想要在USACO比赛中拿到黄金或白金奖项的同学,准备越早备赛周期越长,可以参赛的赛季机会越多,获奖的概率也越高。
对于9-10年级的同学来说,提前学习C++是不错的选择。一来这是比赛中使用最多、也最能出高成绩的语言,而且它属于基础编程语言,无论是在以后学习,还是未来的工作中都用得到。
而从备赛角度考虑,如果之前没有编程基础,那今年的赛季可以先试试水,争取拿个白银以上等级;如果在初中时,就有参加过国内编程大赛且有不错成绩的,今年也可以考虑冲刺下白银、黄金以上的等级。即使没冲到黄金以上,只要拉长备赛的周期,明年的机会就很大了。
毕竟USACO官网本身就有一个强大的Training题库,可以高效利用题库,多练习、建立自己的编程学习档案。就算不是为了竞赛,单纯对于未来希望往计算机方向发展的学生来说,这个题库也是一个不可多得的宝库了。