x

USACO竞赛怎么学?才能迎接年底的USACO竞赛呢?

2022-09-16 15:57:21编辑:飞飞

新的学期已开始,距离新赛季的USACO也不远了,只剩下3月有余的时间,在日常的紧张学习中,能够用在编程上的时间会更少了,那么接下来应该如何有有策略的进行学习和备赛,才能迎接年底的USACO 竞赛呢?

高效备赛USACO

根据最近三年的考试参赛人数,Bronze级过的人数比较多,通过率大约在15%左右;Silver 级在最近三年也就在5%~6%的通过水平,今年应该比去年更低;Gold级的通过率大概在2%~3%左右。

题目难度呈现逐年递增的趋势,尤其是2021~2022年,我们明显感觉到有个别题目原来应该出现在Gold这个级别,但是现在开始出现在Silver这个级别最难的那道题。

前些年的题目特点是偏知识性,只要把知识点系统学习完,有一定的算法基础,孩子就能够比较舒服的通过Gold,当然必要的刷题是必不可少的。但是这一两年,题目难度越来越大,想轻松通过已经不可能了,需要大量的考前刷题和做更多的赛前专业的指导训练。

梳理知识点

不管是编程语言还是算法,如果需要完整地学习和了解的话,都需要花费很多的时间和精力。梳理竞赛最重要的知识点,让学生可以用更少的时间掌握最精华的内容。

原则上来说把基本算法(包括非二分型排序,数学类,字符串类,队列,栈,链表,典型问题等)全部学完了,应该已经覆盖了全部铜牌组的算法和大部分银牌组的算法,可以对照下对应级别所需要的知识点,自我查漏补缺,把未学习或者掌握不够好的知识点再深入学习一遍。

还要梳理历年真题,用历年真题来讲解算法。USACO 的历年真题一般都归属于某一类算法,在学习算法时,如果能够以历年真题作为例题,则能够更容易了解真题的难度,知识点考核方式,以及算法的应用场景。书中把历年的真题按照算法进行了整理,方便学生能够针对性地进行训练。

梳理算法框架,让自己在使用算法的时候,知道思考的路径是什么。很多学生在做题时,明明知道应该使用什么算法,但就是不知道接下来如何用算法解决问题。这就是缺少算法的框架感,不知道该算法中最需要思考的要素是什么,如果针对算法,都有一个算法框架和要素清单,就能够清楚的知道应该在题目中寻找哪些要素,从而快速套用算法解答出来,这种框架感能有效的帮助学生更快速的解答问题。

如何刷题

大家一定要重视刷题,算法是一种解题的思考方式,这种思考方式没有办法简单通过记忆加强的,一定是在应用中加强的。所以学习完算法只是起点, 真正到了刷题环节,才能知道自己所学的算法是否真的理解了,通过算法的应用,不断查漏补缺,把这些算法真正掌握。

重点就是刷历年的真题,通过刷题,第一是熟悉 USACO 竞赛的题目形式,以及如何提交代码,很多学生刚接触USACO 题目时,常常抱怨说怎么题目有这么长,仅仅看一遍连题目都无法完全理解,尽早熟悉题目形式会让学生更加适应USACO竞赛。

第二是理解 USACO 题目的难度。只有通过刷历年的真题,才能真切地感受到USACO 题目的真实难度,真切的理解USACO题目的侧重点有什么不同。

第三是通过 USACO 题目来反向验证自己对算法的理解。学生拿到题目后,很多时候会没有思路,这就说明对算法掌握还不够好,想不到该使用哪个算法解决,针对这类问题要深入反思,从而建立起问题和算法之间的通路,加深对算法的理解,掌握算法的应用范围。三个网站需要重点关注:

1、www.usaco.org,这个网站是USACO的官方网站,注册、报名、比赛、查分、查数据都在这个网站上面,每年的比赛时间安排都会发布在官网的首页。

2、www.train.usaco.org,USACO提供的训练营刷题网站,虽然不怎么好用,但是好过没有,由于这个网站上的标志动物是个奶牛,所以又叫奶牛网站,这个网站本质上就是一个位USACO提供的官方OJ刷题平台,后面会专门出一期如何在这个网站上刷题。

3、www.usaco.guide,这个网站是一个商业性质的USACO培训网站,似乎是USACO几个参赛选手创立的刷题网站。虽然是商业性质的,但是上面有很多的免费资源,整理得明明白白,非常适合新手参考。

很多学生刷了不少题目,但提高并不明显,这是因为他们缺少反思,细致的步骤反思。如果把解题过程分成审题,分析,编码,反思优化四个部分,针对不会做的题目,学生明确的记录是在哪个环节出现问题,这样经过一段时间的观察,就能明确的知道自己在哪个环节比较薄弱,从而不断针对此环节总结新的方法和思路,破除自己的瓶颈。

USACO对选手计算机编程方面的综合实力要求非常高,因此在备赛阶段一定要尽早寻求专业导师的系统指导,提前熟悉基础的算法知识,训练实战技巧,这样才能取得相对理想的成绩