今天我们的文章重点是 USACO Bronze。
Bronze 竞赛要求四个小时内回答三个问题,总分 1000 分。一般来说,及格分数线是 700 - 750 左右,偶尔会达到 800 分,根据一场比赛的题目难度来定。
作为 USACO 的 entry level,Bronze 竞赛并不要求参赛者掌握高级的数据结构或者算法。学生需要掌握一门编程语言,此外通过练习掌握 DFS 即 Depth-First Search 和 BFS 即 Breadth-First Search 的经验。除此之外,同学们需要积累一定的竞赛实践和策略。
以上五点我们一个一个来说。
关于编程语言,Bronze 考生一般只需要掌握该语言的基本 grammar 和 syntax。
对于 DFS 和 BFS,这两者源自 reverse engineering。USACO 官方没有明确提及过,但我们发现当同学们掌握了这两者,能比较好地解答 Bronze 高频出现的 brute force problems。
接着说实践部分,这里不是做多少家庭作业的意思,而是如何练习肌肉记忆和对问题做出快速反应,以及通过开始-探索-解答题目的练习获得竞赛经验和信心的过程。
最后一部分是关于竞赛策略。在四小时的考试过程中,考生可能会面临多种场景。举个例子,一位同学在一道题目上已经花了一小时也没做完,这时候,他应该尝试下一道题还是坚持继续做这道题?有时候,这种决定会产生巨大的影响。有经验和技巧的考生会选择最好的策略和最明智的努力方向,最终的目标是:参赛者应该得到他们的水平所覆盖的所有分数。对于那些超出他或她水平的分数,得不到也没关系;但如果你达到了某个水平,你就必须得到该水平之内这些分数。
但很多时候,我们看到很多同学会丢掉一部分本应获得的分数。原因就是学生在策略上犯了错误,或者是因为他们没有遵从问题解决程序,或者是审题错误,或者打错了某段代码,或者在 debug 过程化了太多时间,导致余下的问题没有足够的时间完成。我们见过很多这样的错误。
做个总结:Bronze 的 simulation 部分,一旦你很好地掌握了编程语言,那就差不多搞定;对于brute Force,一旦你掌握了 DFS 和 BFS,在知识层面就准备的差不多了。但是实践和策略两部分,并不是通过课堂学习和课后作业就能掌握的。考生需要通过多次模拟考试,才能越过某个临界点,达到考过 Bronze 的水平。
以上五点,前三点:编程语言,DFS 和 BFS,都可以归结为一个东西,叫做知识水平(knowledge level)。知识水平的东西,对于 机构 的同学们,只要在常规周末课上认真听讲完成练习,就可以比较好地理解。
然而,理解这些知识并不意味着能够使用它来解决一些棘手的问题,尤其是那些变化比较多或者涉及了好几个考点的题目。这样的问题需要用到多个领域的知识,要求你能超越knowledge level,达到更高的竞技水平,即 competition level。
机构 的 200 级别课程(包括 201 和 202),上过的同学们就能掌握编程语言,DFS,BFS,recursion,iteration 所有这些知识点。当然这些东西你在其它地方学习也都能学到。学会这些东西,同学们如果立刻去参加 Bronze 竞赛,是未必能过的,因为大家的竞技水平 competition level 可能还低于 Bronze 的要求。
但是在 机构,我们在 200 课程后会鼓励我们的学生不断增长知识水平,增加知识覆盖面;同时会有一条系统的上升路径,让同学们提高竞技水平。
增长知识水平,那么当你的知识水平提高到白银级别,所有这些青铜级别的问题就会容易得多。这就是降维打击。
增长竞技水平该如何做呢?首先我们说什么叫竞技水平。举个例子:USACO 题目有的时候是很长的,像在讲一个故事,在这个故事讲完之后,孩子去做的事情,其实是把这个故事抽象成一个带有条件的 problem to solve。这个时候需要孩子有比较强的抽取信息能力,然后把这些信息转化为条件;把条件进行分析之后,先在纸面上完成对问题的一个求解,再去写代码。这些实际考试中需要的能力就属于竞技能力。
机构 有一套系统的方法来提高同学们的竞技能力,具体来说,就是培养他们在竞赛环境中良好的解决问题的习惯,以及用最高效率的方式解决问题。以我们的 Enhancement Class 为例,我们希望同学们通过 Mock Tests,practice the workflow。
但是,如何让良好的竞技习惯成为我们学生的某种本能和肌肉记忆?仅靠每周的课程和作业还不够,多参加 Mock Test 是非常重要的。
在 机构,我们每周都有一次所有 USACO Levels 的 Mock Test。Bronze,Silver,Gold,Platinum 甚至是 US Camp Level。这得益于我们有非常强大的教研团队,他们设计题目,然后布置和真实比赛完全一样的设置和环境,把所有的学生每周同一时间聚在一起,用整个上午的时间完成 mock test。我们会强调以上列出的竞技步骤。之后我们会对这些题目进行讲解,同学们必须在比赛结束后纠正代码,以便通过该次的测试。
如果没有纠正,那么学生们看到类似问题,仍然不能解决它。但如果他们每一次都能解决一个正确的问题,那么他们每一次都在成长。
这就是为什么模拟考试如此重要,以及为什么我们从今年9月开始推出 Enhancement Class。