USACO竞赛

一文讲透USACO!深入分析+备赛注意点

 

USACO 竞赛如何备考呢?USACO的难度有多大?USACO竞赛的备考策略有哪些?支持什么语言,需要什么计算机编程基础,USACO竞赛的难度分类,有哪些级别?今天一文讲透USACO竞赛,备赛是如何高效规划.

 

这个组织形式和中国的国家集训队,包括信息学奥林匹克竞赛的整一套体系是相匹配的。USA Computing Olympiad(美国信息学奥林匹克竞赛),分成4个级别,分别是 Bronze 入门级,然后到 Silver,然后到 Gold,最终的一个级别是 Platinum。最后还有一个美国国家集训队即 US Camp,但是它已经不在 USACO 的考级里。每年 USACO 会选出大约26个学生参与 US Camp,组织他们参加持续 7到10天的考试,最终选出最后的四位选手,代表美国国家队出征国际信息学奥林匹克竞赛(IOI)。

在 USACO 的考级里。每年 USACO 会选出大约26个学生参与 US Camp,组织他们参加持续 7到10天的考试,最终选出最后的四位选手,代表美国国家队出征国际信息学奥林匹克竞赛(IOI)。
 

考试进阶

USACO 每年举办好几次考试,其中最后一次考试叫US Open。在US Open之前有3次考试,前3次考试各有4个小时,最后一次考试是5个小时。在规定的时间之内,考生需要把复杂的题目进行理解和分析然后推导,并且使用算法来解决它,最终需要再把这个代码提交到官方网站上,然后通过官方网站的测试数据判断,获得那道题目的分数。

当考生考完某个级别的考试,达到了一定的分数线,这位学生就可以被 promote 到下一个级别。那么当学生到了 Platinum 级别之后,他将有可能获得一个该年度进入国家集训队的机会。
 

支持的语言

USACO 竞赛支持不同的语言,但支持最多的还是 C++,当然也有参赛者使用 Java,少量使用 Python 以及 C语言。C++ 在编程竞赛的效率方面更加占有优势。
 

晋级分数线分析

USACO 的晋级分数线,在不同的级别不同的场次都是不一样的。

以21年和22年的赛季为例,Bronze 级别的分数线基本是在700~750,偶尔在题目相对比较简单的场次,也会有800分的分数线出现;Silver 在这个赛季基本是650~750左右;Gold 则在650~750。到了 Gold 以后,平均下来看,今年每一场考试能够通过 Gold 到 Platinum,整个美国是少于20人的,所以含金量是非常的高。

在过去三年我们也做了一个数据统计,可以看到在下方数据统计图里,蓝色代表2019年年份,黄色代表2020,红色代表2021,随着年份的推进,参加 Bronze 的年人数从1万出头到接近一万五千,现在的话估计在19,000人左右,每年增长的速度都比较快,这说明有越来越多的孩子喜欢上编程,参与编程。

 

 

在考 Silver 的人数方面,2019年大概是在6000~7000左右,到了2020年就1万出头,今年的话跟去年比较持平。

Gold 和 Platinum 相对来讲人数会少一些,参赛人数在过去三年是一个比较一致的趋势:Gold略微比5000人多一点点,Platinum 更少,估计在一两千人左右,平均到每一场考试估计在300~400人,说明能到达高分段的人比较少。
 

通过率

看了每个级别的考试的参赛的人数,那么有多少人能够考过?在2019~2020赛季, Bronze 过的人数比较多,通过率大概在19%左右。到了去年和今年,就在10%出头以及15%左右。

综合来看,过去三年 Bronze 通过率就在15%左右。

Silver 在前年也就是2019~2020赛季,是在5%;在2020~2021赛季是6%左右;到今年的话也是有所降低。

而 Gold 的通过率大概在 2% 到 3% 左右。

题目的难度也是在逐渐增加。尤其是在今年,我们明显感觉到有个别题目原来应该出现在 Gold 这个级别,但现在开始出现在 Silver 这个级别的最难那道题。

Gold 那就更不必说,在两年前 Gold 和 Bronze 以及 Silver 类似,是偏知识性的这种级别,只要把知识点学过了,那么孩子就能够比较舒服的通过 Gold,当然也要做适当的练习。但是从去年开始包括今年,我们明显发现 Gold 题目出现了更多的套路,需要孩子投入更多的时间来做模拟测试,然后做更多练习。
 

题型分析

首先说 Bronze。我们对过去三年的题目做一个大致分析,题目有三种。

1. simulation

考生只需要用 algorithm 和 coding 实现一个process就可以。

2. greedy algorithm

这类题目相对有一点tricky,需要孩子有更多的 observation 以及 analysis 方面的训练。

3. search

这也就是我们俗话说的暴力法,就是要能用一种枚举的思路来思考问题。

Bronze 级别,掌握了这三种基本题型的解题方法,在知识角度就没有太大问题,剩下的主要在编程能力方面,是否能够把这三种题目的 algorithm 转化为 coding,并且能够正确的通过 test case。

Bronze 总共三道题。很多时候 USACO 可能认为把第一道题放在最简单的一个位置,但其实从结果来反推并不是这样,有时候最后一道题反而是最简单的,所以推荐孩子上来不要看了第一题之后就立刻去写,而是先把三道题都看一遍。

我们应该努力把简单和中等难度两道题目拿满分。总共满分是1000分,Bronze 分数线在 700-750,两道题差不多是666分左右,也就是说我们并不需要最难的第三道题目完全做出来,只要能拿到一部分分数超出分数线,就能够通过 Bronze 考试。

● Simulation题注意点

Simulation 这种题目推荐孩子掌握一个比较稳固的编程基础,另外读题目一定要小心,有时候读错一道题的话,可能花了更多的时间在思考上面,最后突然发现题目读错,那就损失比较大。

● Greedy Algorithm题注意点

Greedy Algorithm最重要的其实不是编程,编程部分通常来讲都非常的容易,更加难的一点是什么?是判断这道题是否能够用 greedy algorithm 来解决,这反而是最难的。

这里有很重要的一点:我们很多时候不需要去证明 Greedy 的性质,因为证明有的时候会更加复杂更加难,很多时候是需要做一个假设,然后再找找看有没有反例能够推翻。如果没有发现很明显的反例,其实就可以试一试,因为 Greedy Algorithm 在写程序的时候往往简单,通过几个循环就能解决掉。所以我们一直告诉孩子,在遇到 Greedy Algorithm 的时候该怎么做。同时,Greedy 的算法因为复杂度较低,所以通常它的数字非常大,就是题目所出的数据范围会非常的大。

● search题注意点

search 题目主要是 dfs 和 bfs,然后需要孩子对 complexity 有一定的了解。这种题型有一种偏几何的题目,往往是跟矩形的边界判定,或者是坐标系有一定关系,但还没有难到计算几何的难度,所以这个地方只要把往年的一些几何题过一过,也就够了。

对于比较难的问题,我们不是特别推荐在 Bronze 级别做专门的准备,更需要的是什么?更需要的是孩子往更高的知识点学习,去学习 Silver 知识点,或者更高级的知识点。那么等到某一天回过头来,其实就已经形成了一个降维打击。

来到 Silver级别,很明显就多了很多 topics,比如除了刚才的 simulation 以及 search 之外,增加了graph 还有DP,DP就是 dynamic programming 动态规划,还有 counting 和 data structure。其中 dynamic programming 这种题型是 21年新出现的,以前从来没有在 Silver 出现过,都是在 Gold 出现。本赛季 Silver 级别考试 Graph 出现的也越来越多,这样 Silver 也会比以前更加有挑战性。
 

常见问题答疑

Q:关于 USACO 考试,对于最难的那道题,怎么样获得部分得分?

A:这个也要分级别来讲。Bronze 和 Sliver 竞赛中,通常来讲更难级别的简单题,就是下面那个级别的难题,所以说比较推荐的系统解决方案,是学习更高级的知识点,然后反向的做降维打击,这是最好的一个方式。

并且学习更高级的知识点的话,也不是做无用功,做的努力也不会浪费掉。

如果说是马上就要考的那种情况,比较推荐在 Mock Test 里尝试以下做法:这道题哪怕我不会做,但是我写一个非常简单的暴力的算法,哪怕我知道这个效率不行,但是考试毕竟跟平时写作业不一样,我们不能追求一个完整解决方案,而是说能拿多少分就拿多少分。

那么在这种情况下的话,多去做这种 mindset training,并且强制自己到了这个时间点,就一定不要再去追求一个完美解决方案,一定要开始写一部分。这更多是一个考试经验这方面的提升。所以总的来讲,长期的解决方案就是提升自己的水平,学更高级别的知识点;短期的话就是提升自己考试经验这方面的发挥。
 

Q:USACO 现在有 Bronze,Silver,Gold 和 Platinum 四个 level,以后会增加 level 吗?

A:USACO 从两年前到现在的变化:把原来的白金级别的东西拿到了黄金级别,然后把黄金级别的东西下放到白银级别,然后同时白银级别有少量内容被放到了 Bronze,所以其实相当于是每个级别都变得更加有含金量。

最近这一两年这么一个变化,其实也是变相的在增加级别。会不会增加一个什么钻石或者黑金?是有可能性。原来是没有白金级别的,白金是在12、13年左右加上去的,此前只有三个级别。如果以后再要加一个级别,可能相应的一些机制会发生变化,但基本逻辑应该是不会有太大的变化。
 

Q:USACO 到了什么 level,会对大学申请有直接帮助?

A:从我们的经验来看,孩子过了 Silver 进到 Gold Division,写到简历上就会有一些帮助。现在即使不是顶级的大学,申请计算机方向的竞争也特别激烈,假如你有经验,特别是 USACO 这样一个大家都公认的、并且含金量越来越高的一个竞赛成绩的话,跟没有的孩子相比,其他条件一致时,这是一个绝对的优势。

假如你能进入最高的 Platinum Level,对孩子进入一些藤校已经是会有帮助了。有些孩子能够进入到 USACO US Camp,这时候很多大藤学校都会考虑你的。
 

Q:大学 CS 专业会对应学到 USACO 哪个 level?

A:首先 USACO 对学生的考察偏重于算法和数据结构这两个方面。

在知识角度来讲,大学会学到的知识点包括了 Bronze 和 Silver 的知识点,然后是 Gold 的简单知识点,也就是 dynamic programming 和graph,这两个是会学到的。但是大学里学了知识点不太会有太多练习。

其实很多人到最后只有要准备去面试的时候,才会pick up LeetCode 或者其它算法实现的东西。
 

所以简单来讲,经过 USACO Training 的学生,他们不光是算法和数据结构这方面有非常强的理论功底,同时也能够把他们给实现出来。在大学里他们学习算法和数据结构当然就非常简单了,学习其他课程也会更加容易。同时他们可以在低年级就开始找机会进入大学lab进行 research。
 

找一个老师好好学习下,掌握了算法和编程基础知识,才有可能在竞赛中获奖。USACO竞赛课程培训电话:18691958628(同微信)

相关文章