USACO是美国含金量极高的一个信息学奥赛,分为铜、银、金、铂金级别,需要学生从铜级开始比赛,层层晋级。USACO比赛的难度也是随着级别依次递增,学生是需要在规定的时间内完成三道题目。
USACO竞赛语言难度
USACO竞赛可以接受的语言包括C,C++,Java, Pascal,Python。其中用得最多的是C++,Java和Python。
其运行度:C++ > Java > Python。
Python:易学易考,但由于它运行速度较慢,一般仅限于在铜级赛中使用。
Java:一般建议学生先从Java开始,因为比较容易上手,而且是美国高中APComputer ScienceA要求的语言,且在铜级和银级的竞赛中和C++区别不大。
C++:随着对算法的要求越来越高,C++在金级和铂金级的竞赛中往往更具优势。C++虽然程序紧凑效率高,但起步难,不建议初学者自学。
USACO各级别要求
铜级熟知基本的编程知识,会至少一种编程语言。大多数铜级的问题没有像高级别那样有很多效率问题。学生需要知道如何正确阅读理解题意,设计一个算法来解决问题。准确地把算法翻译成计算机代码是奥信铜级训练的中心。
银级
在铜级中用到的工具之外,数据结构包括堆、栈、列表、树以及相对应的排序、搜索算法将被引入并广泛应用。一般的简单方法(比如穷举法)将不再适用银级比赛,算法的效率和复杂度将开始成为重心。
金级
基本的数据结构诸于列表、堆、栈、集合、关联数组和相关的算法将普遍应用,更复杂的数据结构包括树和图的算法,以及动态规划、数论和排列组合也将被广泛采用。
铂金级
对算法有深入了解,能解决复杂问题、开放问题。题目复合多种算法,还会涉及高难度辅助算法,不但思维难度大,编码工作量也在加大。
USACO晋级规则
学生提交代码后,系统会自动给出评分,每个编程问题的分值都是333.333分,总分是1000分。当学生拿到满分,系统会提示直接晋级,则可在本次月赛中继续挑战更高难度的等级。未能当场晋级的学生需要等月赛结束后,查看晋级分数线。如果成功晋级,可在下个月的比赛中参加更高级别的竞赛。未能晋级的学生在下次比赛中继续挑战本级别。
一般来说,高于750分或800分的分数通常可以获得晋级。
USACO比赛会根据参赛选手的成绩公布在竞赛结果中,将USACO比赛成绩写在大学由请书或者实习/求职简历中会非常有帮助。获得金或者铂金的学生还有机会提前被藤校所录取。
USACO历年真题
算法的灵活应用能力,一定是通过在解决实际问题的过程中不断训练,使得大脑能够自然的应用这些算法来对问题进行分析和思考。
所以在学习完基本算法后,需要通过刷历年真题来进一步提升算法的应用能力,这个训练非常重要,只有达到能够灵活应用的水平,参加USACO竞赛时才更容易晋级。
只有通过刷题才能清楚自己所学的算法是否真的理解了,通过算法的应用,不断查漏补缺,把这些算法真正掌握。