之前给大家介绍了物理竞赛和化学竞赛,而作为base在湾区的家长们,更关心的就是咱们的计算机编程相关的竞赛了。
今天,咱们就来看一看美国编程奥赛应该如何准备,以及湾区有哪些实力CS强校。
USACO介绍
美国计算机编程最著名的就是USACO(USA Computing Olympiad),和其他Olympiad 系列的竞赛一样,USACO也是用于选拔学生成为美国国家队,进入国际奥林匹克竞赛。然而他的选拔路径和其他比赛不一样,通过选拔的速度完全取决于孩子的水平。
选拔赛制介绍
考试日期:
2019-2020 Schedule
Dec 13-16: First Contest
Jan 17-20: Second Contest
Feb 21-24: Third Contest
Mar 27-30: US Open
May 23-30: Training Camp  
(Postponed): IOI 2020 in Singapore


报名方式:
直接官网报名就可以,没有任何限制。
晋级方式:
所有人都可以参加前三轮比赛,和美国公开赛,但
只有美国公民或者是绿卡持有者
才能够参加训练营以及代表美国国家队出征IOI。

前四次比赛都有不同的level,按照铜牌,银牌,金牌和铂金共分为4个类别。
今年第一轮比赛有7000多人参加,其中美国学生有3500左右,而中国的孩子也有超过1700参加。
[阿妹注意到了在这个表中countries的表述不妥,咱们不讨论zz话题]
每次比赛,选手都可以向更高的级别发起挑战。在比赛窗口开放的三天时间内,选手可以选择任意时间开始比赛。如果拿到了高分(接近满分或满分),可以在比赛窗口关闭之前就晋级到下一级。升级了之后,只要比赛窗口还没有关闭,可以继续向下一个等级进发。没能拿到满分的同学需要等到比赛窗口关闭,等待晋级分数线,才能决定是否晋级。

因此,正如前文所说,如果一个孩子水平非常厉害,那么可能在第一轮当中,做完铜牌的题目并获得接近满分后,直接开始做银牌的题目,如果又拿到超高分,则升入金牌;也就是在一轮考试中从铜牌直接晋级到金牌,连跨两级;等到第二轮,就直接进入金牌的题库,与其他同级别的孩子竞争,以此类推,直到进入铂金。
[阿妹注意到了在这个表中countries的表述不妥,咱们不讨论zz话题。]
可以看到,在美国公开赛(也就是非美籍学生能参加的最后一场比赛)铂金level,中国学生的成绩较为领先。
考试方式:
一场比赛通常有3-4个问题,可以使用C,C++,Pascal,Java,Python中的任意一种语言解题。评分方式是网站自动判定你的程序在规定的时间内所能正确解答的Test Case个数,所以有些时候需要使用较为巧妙的算法。

当你提交你的程序之后,每个Test Case都会获得反馈,绿色代表成功,红色代表失败。其中失败又分为很多种。X 代表答案错误, T 代表超时, ! 代表运行错误或者超出内存限制, E 代表输出文件为空, M 代表没有输出文件.


详细规则请见:

http://www.usaco.org/index.php?page=instructions
备考方式

按级别备考:

因为USACO所有题库都按照铜、银、金、铂金进行分类,因此咱们在备考的时候,也可以从最基础开始一步步熟悉。
Bronze Level:
难度等级:铜级考试只要基本编程常识,会至少一种编程语言。铜级的编程限制时间还是够用的,大部分初次参赛的选手都能在第一次考试中晋级白银级。


知识点:基础数组,多重循环,复合判断,枚举算法
Silver Level:
难度等级:需要基本的问题解决能力和简单算法,还需了解基础数据结构。从白银级开始,选手需要寻找更好的算法才能使程序在规定时间内跑完。

知识点:基本数据结构,贪心,递归,递推等基本算法.
Gold Level
难度等级:需要有一定的算法基础,理解一些抽象的方法,并且对数据结构有比较深的了解。


知识点:堆,栈,树,链表等高级数据结构,动态规划等高级算法,算法时间和空间复杂度。
Platinum Level
难度等级:需要有很高的编程基础,对算法有深入的了解。部分比赛问题最后的优化方案,可能不只一个,得出的答案也不只一个。

知识点:各类高级的数据结构,尤其需要注意算法的时间和空间复杂度。
目前今年的IOI已经推后了,所以家长们可以给孩子们长期计划,为今年12月的第一轮比赛做准备。
      对于没有编程基础的孩子,建议从python或者java入手,上手较快。学习主要内容为数据结构,编程语法,配合一定强度的练习,可以初步通过第一轮铜级的选拔。
     对于有部分编程基础的孩子,比如在读AP计算机的高一高二同学:可以从C++或 者C入手,作为编程语言中最强大最基础的两门,无论是应付比赛还是在以后读本科或者工作中使用,提前学习C++和C都是不错的选择
      对于有编程基础及编程经验的孩子,目标直接是冲击至少金级别以上的奖项,在有数据结构和编程语法的前提下,需要系统的学习一些常见算法,比如排序等等。同时大量练习官方的金,白金级别的真题
  备考资源 
想要备考USACO,像数学那样传统地“先学习所有知识点,再熟悉相关竞赛的题目”的方法并不是特别高效,按照铜牌的考点来看,想要学完所有的知识点至少要2学期的时间,更别提后面的银、金、铂金了。
根据考生们的分享,其实用官网的Training section就是一个很好的备考系统。
整个系统分成六个章节,循序渐进,每个章节会先给出一些必须了解的知识点,然后通过一些题目进行进一步的学习和测试。整个学习的过程,就像游戏过关卡一样,每道题目都是一个任务,这些题目的解答是无法简单找到标准答案的,需要学生充分运用已学知识进行思考,从而把对知识点的了解转换成解决问题的能力
不过需要注意的是,USACO 官网的练习每个任务中的题目都含有大量的知识点,如果孩子是独自学习,可能会出现一知半解的情况,因此如果能跟厉害的Engineer妈妈爸爸,或者和小伙伴组个队一起学习,会高效很多。
阿妹也找到一些之前备考生分享的USACO Training使用体验。
下图就是网站主页了。中间的表格就是一道道题目,必须把一个Section解决才能进入下一个Section。我们看到标题前有TEXT就是文章,看完就可以了,PROB就是需要做的题目。标题前会有标记和完成日期。DONE表示已完成,VIEWED表示正在进行中,TODO表示还没有做过。
进入读题,然后自己在线下写题,写完之后将文件保存为c/cpp/pas格式。 
在每道题题目页面的最下方有个提交按钮,记住在每道题代码文件前面都要加上
/*
ID: your_id_here
LANG: C
TASK: test
*/
或者
{
ID: your_id_here
PROG: test
LANG: PASCAL
}
ID后面填上自己的ID
PROG后面是题目名称 也就是每道题里的PROGRAM NAME:后面的东西
LANG是语言
湾区风采展示
接下来又到了阿妹最喜欢的湾区牛娃牛校风采展示。


Harker还是一如既往的强大,在USACO中每年都有学生进入finalists。而在Computing这个领域能够压住Harker一头的,就是!!!


Monta Vista!!!

咱们先看2015-16年级的数据(仅参考南湾学校)。当年Monta Vista 独领风骚,3名学生包揽前三名。
这些厉害的孩子,之后去哪里呢?


Bryan Chen--MIT--engineering
Suchir Balaji--UCLA--CS
Christopher Chang--MIT--engineering
Anson Hu--MIT--engineering
Mihir Singhal--MIT--engineering
而到了19年,Monta Vista还是南湾的老大——仍然有3位学生进入决赛。
总而言之,computing 的基础是扎实强大的数学功底,所以也有很多牛蛙是USAMO 和USACO同时参加的。
但是正如阿妹在一开始说的,参加USACO不仅仅为了奖牌,还可以得到一个非常好的机会去锻炼孩子整合信息,解决问题的能力,这对孩子一生求学工作都有帮助!
而对于幼儿园小学的家长来说,阿妹觉得不用那么着急,培养computing的能力不是只有尽早上编程课这一个途径的
阿妹也在搜集适合不同年龄段孩子对应的资源和课程啦!感兴趣的家长,不要忘记点赞鼓励我哦!
阿妹保证和自己的拖延症抗争到底!!!
参考资料:

https://www.linstitute.net/archives/310832
https://blog.csdn.net/qq_34531807/java/article/details/79371244
https://blog.csdn.net/u013724185/java/article/details/21448431

==== 往期精华 ====

推娃优选:
择校相关
--------
无论你家娃incoming 9th graders,还是刚刚爬藤的K-5学生,谷阿妹都欢迎你们加入硅谷推娃群~~~!
和正在经历同样抉择的各位家长们一起进步,学习如何科学地帮助孩子成长~~
你点的每个赞,我都认真当成了喜欢
继续阅读
阅读原文