3分钟带你详细了解·USACO美国信息学奥赛


v2-1b225848edb3518ac90f0f93c5307a6f_1440w.jpg

什么是USACO?

HiMCM(High School Mathematical Contest in Modeling) 美国高中生数学建模竞赛,是美国数学及其应用联合会(COMAP)主办的活动,面向全球高中生开放。 USACO(美国信息学奥林匹克竞赛)初次举办于1992年,其官网是美国一个著名在线题库,更是美国中学生的官方竞赛网站,开设目的是为每年夏季举办的国际信息学奥林匹克竞赛(IOI)选拔美国队队员。

在不久前落下帷幕的US OPEN比赛中,总计有2993名参赛选手入围公开赛。其中,中国籍参赛选手共计409人(仅次于美国1431人),成为参加USACO公开赛的第二大国。

比赛形式

比赛采取积分赛制,分为月赛和公开赛两轮。月赛举办于每年十月,十一月与十二月。

在每场月赛中,根据之前题目的完成情况,选手会被分为不同的组别(铜组,银组,金组与铂金组),难度依次递增。

新注册的参赛选手需要从铜组开始打起,在规定时间内完成三道题目,如果完成度较好将会被提升到更高组别。

选手可以在该次月赛指定的时间范围(通常是4天,覆盖一个周末)中的任何一个时间打开题目,并在规定的时间内完成比赛并提交。

通常情况,月赛比赛的时长为3-4小时,选手需要完成3-4道题目。

比赛试题难度

比赛试题难度 月赛的题目与IOI试题类型大致相同,绝大多数为传统试题,但也在极少数情况下出现过提交答案类型试题。

试题难度:

  • IOI试题>金组试题>NOIP试题

  • 银组试题=NOIP提高组试题

  • 铜组试题=NIOP普及组

  • (注:IOI为国际信息学奥林匹克竞赛, NOIP为全国青少年信息学奥林匹克联赛)

  • USACO接受Python、Java、C++、Pascal和C五种语言

其中,低组别的题目主要考察参赛人对编程语言的最基本掌握度,高组别比赛会涉及到算法与数据结构的知识。

比赛规则

  1. 根据USACO规则,程序的运行与结果必须完全是确定性的,不允许在程序中使用时间函数初始化随机种子。

  2. 选手在参加比赛时可以使用书上、互联网上或者自己曾经写过的代码,但是代码必须标明出处,否则被认为作弊。

  3. 另外,除非特别声明,选手必须独立完成试题,其他人帮助时被禁止的。

比赛结果

月赛结束后1-2天,通过电子邮箱发放参赛选手的程序的评测结果。

同时在比赛相应的页面上你可以找到测试数据、题解、所有参赛选手的程序代码、所有参赛选手的成绩总表以及对比赛的简要分析、统计与总结。

公开赛之后,根据全年在线比赛和培训的成绩,一些选手会收到邀请参加训练营,之后选拔4个选手代表美国国家队参加IOI,这些选手都是美国籍或者在美国上高中的学生。

所以中国的学生最高可以参加公开赛。

参赛建议

  1. USACO提供的题库可供全世界所有的信息学竞赛选手进行训练,网站的训练题全面,是每个参加比赛的学生必不可少的工具。

  2. 每年NOI,NOIP 都会参考上面的题目。

  3. 题库共有6个chapter,为六档难度的试题。

  4. 各章节形成了一个鲜明的知识结构,利于IOI初学者和高手逐步提高水平,充分学习信息学各方面知识,避免偏颇。

  5. 每一个chapter中一般有4-5个section,每一个section集中介绍某一类型的试题。

  6. 在section的开头一般会有一篇算法介绍,然后有4-5道试题。

  7. 每一道试题都可以提交USACO服务器评测。每道题附有详细题解,可查看测试数据和运行结果,便于调试、发现错误并改正。

  8. USACO的训练题库具有非常强的顺序性。要将前一个section中所有试题都通过,否则学生无法得到下一个section的算法介绍和试题。


对喜爱编程的学生来说,USACO是一件大事。这项一年一度的竞赛已经有20多年历史,不仅吸引了美国的,而且全世界的学生和编程爱好者。参赛者以高中生为多,也包括不少初中生,大学生和其他爱好者,将近一半来自其它国家。

全球的大约5000名参赛者都可以通过参加网上的三场竞赛,晋级铜奖、银奖、金奖和白金奖四个等级。虽然,最后环节的训练营或者最终代表美国队参加IOI,只有美国公民或者绿卡持有者才有机会,但是在USACO的等级可以充分证明你的编程实力。


竞赛奖项简介

青铜

- 难度等级:掌握基本编程常识,会至少一种编程语言。编程限制时间足够完成任务。

白银

- 难度等级:需要基本的问题解决能力和简单算法(例如:贪心算法,递归搜索等),还需了解基础数据结构。从白银级开始,选手需要寻找更好的算法才能使程序在规定时间内跑完。

黄金

- 难度等级:需要有一定的算法基础,理解一些抽象的方法(例:最短路径,动态规划),并且对数据结构有比较深的了解。

白金

- 难度等级:需要有很高的编程基础,对算法有深入的了解。部分比赛问题最后的优化方案,可能不只一个,得出的答案也不只一个。


有问有答

(欢迎留言提出新问题)

Q:

这个比赛要求什么基础?

A:

青铜级别的数学达到10年级公校即可,编程要求60个小时经验。如果要冲击白银段位,数学能力要达到AMC10;编程算法能力要达到加拿大Beaver 10或者美国ACSL ID。

Q:

这个比赛适合什么年龄?

A:

我们建议同学从8/9年级开始接触这个比赛,9年级获得铜级别,10年级冲击白银和黄金级别荣誉。自己在家可以额外准备的内容包括:数学知识点提升,阅读真题原理,和适当练习题。大部分学生每周需要2个小时的连续学习。

Q:

家有初中生,父母如何配合在家练习准备?

A:

自己在家可以额外准备的内容包括:数学知识点提升,阅读真题原理,和适当练习题。大部分学生每周需要2个小时的连续学习。

Q:

高中11年级生如何参加这个比赛?

A:

这个比赛竞争性很强,而且不可能通过短期突击的方式获得好成绩。

Q:

这比赛英文要求高么?

A:

题目是这样的。每道题目都差不多这样的长度,让孩子看看能不能对付。

Q:

什么编程语言适合咱娃?

A:

USACO每场比赛4-5个小时,最受学生欢迎的编程语言是C++,Java,Python,和C。您的孩子可以选用其中的任意一种编程。我们的经验是对于7-9年级学生,我们推荐孩子使用Python或Java,9/10年级时学习使用第二种编程语言比赛 (c++/C)。一般而言,这样的方案有助于他们更容易在 10年级左右获得好成绩。

ROBOKIDS准备路线图

1 G5-G6: 学习模块编程:EV3,VEX,Microbit

2 G6-G7: 参加编程相关的比赛:Beaver,Codecup

3 G7-G8: 学习Java/Python编程基础P/J 7&8&9

4 G8-G9: 学习竞赛类编程,C++/C课程。

5 G9-G10:挑战USACO 青铜/白银

6 G10-G11:挑战USACO 白银/黄金

注意事项

USACO规则中明确规定“直接输出答案”是作弊行为。但是这种做法在多数其他国家信息学竞赛与程序设计竞赛中都是合法的。为避免被禁赛,请时刻了解这一规定的解释。