OI思维水平的练习与提升
声明:以下观点大部分为本人的自我总结,可能不适用于所有人。
本文主要谈论的是思维水平,代码水平在本人看来就是熟能生巧的问题。
1. 怎么知道自己的思维水平?
关于标题,答案其实很简单,你能想出什么难度的题你就有什么思维水平。
首先题目的思维难度可以这么理解
- 有的题目仅要求你推导出一个函数。
- 有的题目要求你推出函数的同时,找到函数在特定区间内的特殊性质。
- 有的题目不仅要求你推出函数、找到特殊性质,还需要合理利用特殊性质(比如选用合适的算法优化)。
其实就是思维深度和广度问题。
如果你只能想出第二种题,那你的思维水平就是第二级。以此类推。
然而有些时候你发现,你要想很久很久才能想出第二种题,或者和正解有那么一丢丢差距
那么其实可以认为,你实际上具备了这种层次的思维水平,但不具备应有的熟练程度。
2. 什么是熟练程度?
下图(详见参考文献[1])是 Um_nik 巨佬在 blog 里给出的
实际上我定义的思维水平是离散的,也就是图中的红点。
而思维的熟练度描述了我们的水平是如何随时间连续增长的(毕竟思维能力可不会轻易的大幅增加)。
也可以这么理解我的模型,思维水平就是做出这一难度题需要的“平均水平”
而没有到达“平均水平”前,我们无法做出这一难度的题;
反之,随着熟练度增加,我们思维能力为渐渐超过当前的“平均水平”
这意味着我们可以更快的解出这一难度的题,但仍然无法解出更难的题,直到我们达到下一个“平均水平”。
3. 怎么练习和提升思维能力?
我是这么认为的:如果已经可以在合理的时间内做出 A 难度的题,就可以去做 B 难度的题了。
这个合理的时间具体有多少要看个人的理解,但我认为,想出这题至少不能让你感到十分吃力。
有很多对于思维能力提升非常有帮助的题,比如这个题单 2020,2021 年 CF 简单题精选
我个人认为 CodeForces 的题非常适合提升思维水平。
另外,最好不要刷对你来说太过于难的题,因为它可能需要拥有 A->B->C 的能力,而你连 A->B 都不行。
当然了,总重要的还是多思考多写题,甚至可以像我一样每道做过的题都写一下题解。
参考文献:
[1] How to practice Competitive Programming [Um_nik version]