最近一位学生向我分享他参加USACO 本月银组题目后的感受,说是除了第二道题目一看就知道应该使用图算法,另外两道题目完全不知道应该使用什么算法,他希望能够了解,在拿到题目后如何能够快速的关联到对应的算法。
学生之所以会有这样的感受,是和USACO 竞赛题目的特点有关的。之前我们介绍过,USACO由于是在线考试,一旦能够确定题目使用什么算法后,一般都可以在网上找到对应的解答,现在互联网的搜索这么强大,只要你能把问题确定,一般都能找到解决问题的方法,但最难的恰恰是你确定问题的过程,如何通过给定的线索一步步分析问题并确定算法,这是USACO 题目重点考核的能力。
这个过程有点像玩密室,进入密室后,会有很多线索提示,这些线索看似有价值,但又好像无价值,你需要在这些线索中,找到与当前任务关联最为密切的,这样才有可能破解当前的关卡。经过了这样一步步的破解后,最后才能通关。每一关都有一些线索,这些线索无法直接拿来使用,需要进行梳理、筛选、排查、拓展、联想,最终一步步到达终点。
现在很多学生在做题时,缺少的恰恰就是这样的心态和能力。大部分学生做题的时候,从来没有觉得是一件有意思的事情,也就不会用玩密室的心态来对待题目,一点点去发现线索。还有不少学生平时其他科目刷题太多,养成的习惯就是,如果看着有印象,就直接按照直觉去做,如果没印象,就放在那里不做了,完全是靠记忆在做题,而不是靠思考在做做题。
真正的解题过程,其实是一种找规律的过程,养成找规律的习惯,比简单的记忆几个算法或者公式更有价值。要知道题目可以无穷无尽,所以靠刷题建立起来的记忆是不靠谱的。但通过对题目的分析,建立起来的找规律的思考过程,却可以应用在新的题目上,有了这个能力,即使遇到了从未见到过的题目,也可以通过分析拨云见日。
这次银牌组的三道题目,第二道题目很明显是图,所以大家自然而然会想到 DFS 算法。但另外两道题目,简单从已知数据和所给的条件上,基本上无法确定应该使用什么算法。只能根据条件层层抽丝剥茧,不断寻找规律,最终才能确定对应的解法。
那么如何通过日常的学习养成这种分析的能力呢?
解题时重视质量而不是数量
USACO每个级别所涉及到的算法并不多,所以并不需要大量的刷题。解题的时候应该更加注重质量,而不是数量。历年真题就是最好的题库,每次做题时,给自己留好充分的分析时间,尝试在已知数据和条件中找到规律,抓住线索一步步深入。
抱着玩密室的心态去解题
解题是学生日常做的最多的一件事情,但大部分学生对于这件事情本身并没啥兴趣,导致整个解题过程非常机械,解题时心态上很麻木,完全没有办法体会一步步接近答案的快感。建议学生后续做USACO题目的时候,可以抱着玩密室的心态,尝试是否能够通过一些蛛丝马迹,找到破题的关键。
USACO 竞赛中,用四个小时的时间来解答三道题目,这种题目量的设置,决定了竞赛并非是为了简单考核知识点,而是希望能够给予充分的时间,让学生一步步发觉线索,找到规律,最终通过代码来验证思路。所以请准备参加USACO 竞赛的学生,从现在开始认真训练下“找规律“的能力,抱着玩密室的心态,用心参与到竞赛中吧。