USACO(美国信息学奥林匹克竞赛)初次举办于1992年,其官网是美国一个著名在线题库,更是美国中学生的官方竞赛网站。
开设目的是为每年夏季举办的国际信息学奥林匹克竞赛(IOI)选拔美国队队员,同时也是国内学生申请美国大学提升背景的利器。
USACO题型分析
首先说 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 也会比以前更加有挑战性。
USACO五大问题答疑
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。