USACO 2021-2022 赛季的第一次竞赛在上个周末如火如荼的进行着,由于时差的原因,国内直到昨晚才最终结束。很多参考的学生都第一时间联系了我,分享了一下他们参赛的感觉。
有很多学生是第一次参加 USACO 竞赛,他们最开始听到四个小时只需要做三道题目,感觉时间肯定是绰绰有余的,但真的参加一次才发现,对于编程题目来说,代码的修改还是挺耗费时间的。整个做题的过程并不是一个从头到尾线性的过程,而是需要不断迭代的。当你提交代码后,并不意味着就万事大吉了,而很可能是噩梦刚刚开始,你需要根据结果反馈不断修订代码,甚至需要重新分析题目,这就需要耗费很多时间了,并且考试时都会比较紧张,更会觉得时间流逝飞速。
所以说,我一直建议学生要合理的安排时间,在没有认真审题以前,不要着急着开始编写代码,最终执行结果不正确,你还是要重新返工的。比较合理的方式是用半小时左右的时间认真审题和分析,彻底读懂题目,找到题目的规律,这个时候再开始编码,这样就比价容易通过了。
有的学生向我反馈说,看到题目就傻眼了。原来学习算法的时候,老师让做的题目基本上能够知道需要使用什么算法,只需要往那个方向上去想就行了。但是参加竞赛时,拿着一道题目就是不知道从哪里下手,粗看上去,感觉和所有学习过的算法都不沾边,根本没办法直接拿算法模板套用,看着时间一分分流逝,大脑一片空白状态。
USACO 题目的特色就在于灵活。可以想象,对于这种线上比赛来说,如果题目能简单的套用算法,你在线随便搜索一下对应的算法代码,那这个比赛还有什么参与的价值?USACO 考题的侧重点就在于考核你使用算法分析问题的能力,所以平时做题的时候,可以把题目的问题类型和算法做一个关联对应,这样更容易从问题入手,快速联想到对应算法。
还有些学生分享说,他们拿到题目感觉并不难,于是自信满满的就开始做题了,并且很快在样例数据上得到了验证,但是提交代码后,发现竟然只对了一半的题目,另外一半题目因为性能原因没能通过。这个时候就需要回过头来考虑更优化的算法,从而耗费了很多时间。
对于铜组以上级别的题目,本来在做题以前就要考虑下算法是否能够达到数据量的要求。而对于铜牌级别的算法,往年一般不会要求在性能上做优化,但今年很特殊,铜牌组的几道题目也需要考虑到优化问题,例如铜牌组第三道题目,不优化的代码只能通过一半的数据,而第一道题目,最后一组数据很难通过。
在看到题目后,我的感受也是整体难度提升了不少,铜牌组对学生的要求已经不仅仅是做出来了,更是需要学生找到优化的解决方案。虽然所涉及到的算法还是原来那些算法,但一旦要求时间复杂性后,难度也提升了一个级别。这次难度的提升,很可能是因为这两年学生的平均水平提升导致的,也和参加人数的增多息息相关。
所以这次能够顺利通过的小伙伴们,应该为自己庆贺一下,你们真的很棒!这次没能顺利通过的小伙伴们也不要气馁,有了这次教训后,在性能优化方面刻意练习一下,相信在下个月的竞赛中会有更加优秀的表现!