显然光刷题是没有什么用的, 做完一题之后一定要有一些思考, 比如:
- 这样做的动机? (灵光一现当然很好, 但是如果能找到一些通用的动机不是更好吗)
- (对于某些题而言) 为什么这样做是对的? (不要忽视证明, 至少可以锻炼思维的严谨性)
- 这题可以怎么改? 改了之后怎么做? (很耗时间, 但是也是乐趣所在吧)
等等.
还有很多算法/数据结构不熟或是根本不懂, 所以这方面也要用力搞搞. 要注意的就是学一个不太常用的算法可能当时觉得非常有道理, 过一个月以后就忘了一大半了. 最好还是要好好规划, 学了一个算法之后, 可以过一两个星期之后再做几道题加强一下.
看错题了/算法错了
- 一定要冷静
- 不要局限在原来的思路中
- 算法的错误容易随机/构造出来吗? 如果并不容易, 可以考虑先放一放, 或是打打补丁
- (认真看题, 提高严谨性)
死也想不出来
- 一定要冷静
- 再看一遍题
- 用力想 (二分答案? 容斥? 单调性? 猜结论?, etc.)
- 想特殊的部分分
- 先去做其他题, 或是先拿尽可能多的部分分
- 想不正确(或是不会证明)但是不容易被卡的方法 (骗分 QAQ)
- (提高智商)
死也调不出来/拍出错了
- 一定要冷静
- 不要只对着最容易出错的地方调
- 检查题意有没有搞错, 数据有没有错
- 检查算法的正确性
- 如果是很难打的题, 实在调不出来, 可以先打个暴力
- (仔细打代码 + 适当静态差错)
注意事项
- 一定要检查数组大小 (过大/过小)
- 即使不打对拍, 一定要记得造极限数据
- 对拍时造数据不能只造大数据 (比如说权值范围过大可能某些错误拍不出来)
- 根据题目类型不同, 有些题即使过了大样例还是得对拍, 有些题只用造一下极限数据就稳了
- 遇到奇怪的事情可以仔细思考一下, 说不定可以挖掘出什么性质来
- 猜结论的时候一定要意识到自己是在猜
- 及时备份代码, 特别是在一些较大的修改之前
- 最后几分钟, 检查文件名, 数组大小, 各种常数, 然后编译一下