怎样刷题才能事半功倍?这份技巧指南快收好!

刷题是信息学奥赛提升实力的一个不可或缺的环节


许多家长和学生认为刷题就是读题想题解题,想不出来就看题解再解的一个过程。


诚然,这样确实可以提高实力,但很可能就会错过快速提升的机会。


以下是为大家梳理的刷题流程:



图片

初学者



对于初学者,总结就是不爱动笔,喜欢全靠大脑思考。


有以下几个问题:



01


首先是读题


对于描述简洁的题目还好,但是如果遇上好几百字的阅读题,或者是题意信息复杂的题,可能有的孩子就直接倒在读题部分了。


*建议:

读题的时候可以用笔记录关键的部分。

例如排序题,可以在纸上写好排序的方法等。



02


其次是不看样例,或者看了样例也不自己模拟样例


这就导致了很多初学者读完题之后直接写代码,然后测试,发现样例不对。


这时候才手动模拟样例发现题目和自己写的完全不是一回事(甚至有孩子不会模拟样例根本发现不了代码的问题,陷入怀疑之中大脑就直接宕机了)。


只好把写好的代码删除重写,或者是在原来的基础上打补丁。


这样写出的代码只能叫做无效代码,难以达到提升的目的。



03


再次是想题


*推荐做法:

初学者将自己的思路写在纸上,然后想好大概的实现步骤(写一个简单的代码流程图,并记录关键变量的含义),最后再翻译成代码。


初学者的代码容易出现前后不一致的现象。


很大的原因都是因为想题以及改bug的时候思维混乱,忘记了变量的原有含义,赋予了新的含义而导致矛盾。



04


最后是调试


经常可以看到有初学者写的代码出现了bug,然后就是无止境地盯着代码,希望能在其中找出破绽。


如果是大数据出了问题还可以理解,毕竟这个时候经验不够丰富,面对大数据不会调试技巧,只能希望盯着代码能找出bug。


不过我看到的更多的是代码连样例都通过不了,然后孩子就盯着代码找bug了。


这个是错误的,浪费时间而且这一次找出bug的经验很难应用于下一次


*正确做法:

1、分析代码的流程。

2、找出其中的关键量(还记得在想题部分的将简单的流程写在纸上了吗)。

3、利用手算得到一个值,再在代码中利用输出语句将其值输出来。

4、比较两个值是否相同,如果不相同则可以确定这个部分有bug;相同的话则说明没有问题,可以去找下一个点。


经过这样的方法,最终可以定位到bug,很明显这个方法比盯代码有效。


同时孩子还可以在这个过程中进一步理解代码运行的逻辑,可谓一石二鸟



图片

进阶者



对于进阶者,良好的做题习惯已经在大脑中形成,同时经过长时间的代码训练,也已经具备调试复杂程序的能力。


此时则是要充分利用题解。各大评测网站,包括比赛平台,都会提供题解区。


有很多同学认为自己想出了题的话就不需要看题解了,其实这是一个很大的误区。


因为很有可能其他人会在题解区给出不同的见解,而这种多元化的视角可以带来全新的思考方式


这样的效果相当于用做一个题的时间锻炼了两个题甚至更多题的思维量,实现事半功倍的效果。



图片

刷题网站推荐



对于洛谷,无需多说,中文OJ,对于同学来说应该是使用得最多最顺手最熟悉的OJ。


对于Codeforces,题目左边的Tutorial是题解区。部分场次的比赛出题人甚至回味选手提供Hint(提示)来帮助解题。


在Tutorial区下方有评论,英语好的同学可以看看其他人的讨论,可能会有惊喜,毕竟Slope Trick最早也是出现比赛的评论区。


对于Atcoder,要想看懂user解说需要有日文基础,所以不做推荐。


图片


图片

图片图片


已邀请:

要回复问题请先登录注册