这是一篇关于 OI 考试的一些策略、方法,里面会讲一些笔者认知内重要的东西。对于 OI 考试来说,光是有“一身武功”要想打出好成绩可能还远远不够,我们需要通过一些合适的技巧让其有“用武之地”。所以在此我准备讲一讲比较合理且普适的策略方法。此篇文章的适用范围限于 OI 赛制,也就是针对 CSP、NOIP 以及 WC、省选之类的比赛。
引言
在这个内容下我想讲一些面对一些情况的处理方式,虽然但是,这一切都只是纸上谈兵,真的遇到的时候最关键的还是需要有冷静的大脑。
最基础的比如设备有故障,或者键盘垃圾等非常影响自身效率的东西建议速速举手告诉老师申请换设备,不然你就会难受一场并且容易心态爆炸。如果周围有那种 nc 喜欢说话的小屁孩也建议举手告诉老师,让老师制裁一下这种出生,这种人被制裁后你自己说不定心情还会变得更好。如果不小心把电脑整蓝屏、关机了也不必慌张,因为就算代码丢失了你也能很快再写出来,要相信自己一定能做到,要有信念,意志要坚定。
然后最主要的其实还是调试代码的问题。这个是个大问题,如果处理得好可能并不会影响什么,甚至可能都不会发生,但是大多数人往往不善于处理这类问题,并且在考场上花费大量时间死磕一道题最后螺旋爆炸。注意这并不是小问题,这是能力与心态的考验,我认为在某些方面其难度不低于想出这个题。调试代码不仅是脑力活,更是体力活,接下来我会着重讲如何处理这类问题。
最开始我们可以先静态查错,建议从最根本的东西开始检查,比如数组大小、数据类型、取模、初值、多测清空等等,然后可以按代码运行的顺序在脑中边模拟边检查。注意 if 语句有的地方大括号不能省略,有的地方改用逗号还是分号。注意有没有语句的实现顺序有误,或者哪里笔误把变量用混了。一些变量的初值有没有考虑到不同的情况,甚至看看会不会有 UB。特别要注意全局变量和函数变量有没有搞混,以及循环枚举的东西是什么,范围是什么?
静态查错是比较快的,可以先看了两轮。如果还是有问题就不建议继续干想了,这时我们去输出一些比较重要的参数去定位哪里出现了问题。考虑到之前验证算法的时候我们构造很多神秘小样例,这里就可以派上用场。如果只用下发的大样例,那就有你调的了,说不定调上个半场一场的。
然后如果说你在使出浑身解数后还是不能调出来,并且已经花费不少时间了,应该怎么办呢?当调了这么久后,我们的心态肯定或多或少会受到影响,所以我们首先需要调整心态,我们可以尝试深呼吸、心理暗示等方法,建议还可以去上个厕所。等自己稳住心态后你就需要想了:到底是死磕这道题还是先去看后面的题呢?这里建议选择后者,你可以先假设自己已经过掉这道题,不管它正常去做后面的题,只是最后可以多留一些时间重新看看这道题,有没有可能是自己的做法假了但是前面没 hack 掉?或者还有 corner case 没有处理?但是无论如何,请你相信自己,你要有能够做出题的信心信念,才能有足够的动力支持你最后调出来。
最坏的情况就是出现身体不适之类的,这时我们更要稳住心态。虽然这种事情会对我们的发挥有一定的影响,但是这些东西带来的副作用并没有我们想象中的那么大,就像参加高考前一天失眠,第二天也不至于比平时低个几十分,就算有那估计也是因为心里觉得自己不会发挥好,心理暗示导致行为意识,最后决定结果。所以在遇到这种状况后我们要思考我现在是否有能力继续考试?我要坚持一会吗?又或者就此放弃?建议是以自己身体为主,毕竟“留得青山在,不怕没柴烧”。
赛后总结
赛后建议估分写总结,思考自己这场比赛的得失。是否达到自己的理想分数?有没有打满自己的上限?哪里还可以做得更好?哪里做得好需要继续坚持?在后续的训练比赛中我们就要汲取教训,注意自己容易犯错的地方,多留个心眼。哪怕就算是退役了我们也要理性看待,要明白 OI 陪伴了我们的青春,但人生的路还很长。“路漫漫其修远兮”,只有保持一颗积极乐观的心才能砥砺前行,哪怕达不到自己的目标,也不要给自己留下遗憾。但是要拥有一颗积极乐观的心又何谈容易呢?但好事多磨,只有当自己经历了很多事后才能对时间事物有更深刻的体会。
最后
最后笔者也祝大家的 OI 之路一路繁花似锦、前途璀璨,面对成功有真心实意的感恩,面对失败有一笑而过的洒脱。希望这篇文章能对每一位读者有所帮助。如有不同的想法与见解随时欢迎交流!