数据结构论坛

首页 » 分类 » 常识 » 我的OI经历张正超深学教育资深教
TUhjnbcbe - 2024/3/11 16:42:00
我的OI经历

看到在“深学汇”学习的学弟学妹们,不由得回想起我曾经的OI经历,特别怀念那段紧张学习的时光!也顺便总结一下自己的经验和教训,如果能对各位后来者有所帮助那就更好了。

我家乡在山东莱芜,山东省面积最小、人口最少、GDP最少的一个地级市,全市只有4所普通高中。不过幸运的是我所在的高中是我们市唯一一所有组织学习参加OI的高中,而我开始接触编程搞OI也是从高一入学后几个月才开始的。这样介绍并不是为了吐槽,而是想和各位同学介绍一下我当时所处的大环境,比起现在很多同学要差多了。如今,“深学汇”班上的很多同学从小学或初中就知道有OI这回事,开始学习编程。那你们比起其他同学来已经遥遥领先了,而从高中开始学的也不要着急,像我一样,也还有足够的时间取得好成绩。

介绍完了大环境,开始说说我的学习经历。刚开始学的时候难度是不小的,毕竟是一门之前从未接触过的全新课程。我现在还记得一个片段,当时我看一段先读入n再读入n个数的代码,怎么也看不懂,就是想不明白明明只有一个读入语句,为什么可以读入n个数。后来经过学长的点拨,才明白了for循环这种结构。记得最开始的时候并没有专门学习语言,也没有专门的老师从头开始教起,主要是通过一些PPT、队友之间的交流及看别人的题解一点点学到的,并在练习中一点一点掌握。其实OI对语言的要求很低,学会一门语言最基础的就可以了,并不要求掌握多少技巧。不过各人对于不同学科的接受能力不同,有些同学可能在语言这一关遇到一些问题,就是想不明白几种结构或者说无法学会用程序语言来描述和表达自己的思路和想法,这也没什么关系,要多看多想多模拟计算机的运行就好了,厚积薄发,会在不经意的一瞬间恍然大悟。总之,搞OI的学习曲线是有点陡峭的,也就是刚开始学习语言的时候有点困难。原因并不是因为编程是一件多难的事,而是OI相对于其他几科奥赛是全新的之前没有学过的东西,而数理化生奥赛其内容或者说学科逻辑之前早就经过了很多年的学习,所以接触起来没有大的障碍。但入门之后,我个人感觉OI对个人能力的要求实际上低于其他学科奥赛。

经过了语言这第一道门槛,就开始进入第二个阶段,学习一些算法。现在回想一下,其实知识方面涉及的比较广,包括各种算法思想(贪心、分治、动规、搜索等)、各种数据结构(栈、队列、树、图等),但是对其深度要求并不是很高。在学习这些东西的时候,有的很好理解,有的比较难理解,有的理解了记不住,有的记住了不会写,但任何事都怕“认真”二字,一旦认真,多啃上几天多做几道题目,再难的算法也都掌握了。在这个阶段,要把各种比较常用的算法理解并且形成自己的代码库,典型的算法可以自己熟练的写出来而不出错,为真正上考场打下基础。时间段大概是在高一升高二暑假这段时间,我到现在仍然记忆犹新的是在那个暑假,我和一个队友给自己加班留在学校训练的十天。除去在学校补课的时间外,我们OI队员暑假大概有两三周假期,而和另一个队友约好回家呆了大概两三天再回到学校继续训练。这里就体现了队友的重要性,如果是我一个人的话我估计我就在家好好玩了,我非常感谢他,现在依然记得那段为了共同的目标奋斗的精神头。有一个志同道合的队友或者说团体在OI这件事中非常重要,不仅可以交流知识互帮互助,还可以互相监督互相督促,共同进步。而OI圈子气氛也很好,很多大牛都是乐于助人乐于分享的人,绝不会敝帚自珍,所以大家要把这个风气维护下去,积极帮助同学。如果本地的情况比较困难,学校没有开展OI班,那找一个线上的OIer作为朋友作为目标也是可以的,毕竟我们OIer就是搞这个的,要学会积极利用网络资源。

当时对于各种算法只是初步了解,对于一些稍难的题目根本不会做。不光不会做,有的甚至连别人的解题思路、别人的代码都看不懂。这里分享一下当时我遇到的问题和所得到的教训。在遇到自己不会的题目时,我去找题解,可是有的题解写的也不详细或者是知识储备不够,导致题解也看不懂,一下看不懂就去找其他的题解,还是浏览一下,如果还是没法一眼看懂就想着再去找个更“详细”的题解。最后就导致看了别人的很多题解,但这道题到底该怎么做,为什么这么做还是不清楚。后来我才努力控制自己去找“好懂的题解”的冲动,认真看懂一份题解,发现很多情况下,浏览时看不懂的部分,再认真看认真推导是可以看懂的。这里并不是说让大家随便找到一份题解就死命地看坚决不换,事实上一个好的题解很重要,而是告诫大家在看题解的时候一定要认真,每一步都要自己推导一下。找很多题解每个都只是浏览一下,那无论如何也是搞不懂的。

在此期间,我平均每天只能看懂一个左右的题目,而和我一起的队友每天都可以刷三四道题目了。这样其实晚上的时候感觉很失落,一整天过去了又只刷了一道题,而队友又刷了3道。后来的时候为了避免这种失落,就自己告诉自己每个人的学习方式接受能力不一样,我自己比较适合“慢工出细活”,仔细把一道题理解透也能很好的掌握这个知识。应该说,这种想法是正确的,每个人的学习能力和方法都不一样,所以不要单单用刷题量这个指标来和别人对比,这样很容易出现焦虑等情绪,这种情绪对持续的高强度学习危害是很大的,所以在训练过程中,一旦发现自己心理状态有问题,就要及时疏导及时调整,保持一个积极健康的心理状态对于OI来说是非常重要的。

暑假在学校加练的这十来天时间当时感觉比较苦,但留在记忆里的是为了理想而努力地坚持,这是留给我一生的宝贵回忆。“深学汇”的各位同学有很多现在才是初中小学,没有压力,可能体会不到这种情感,到了高中估计就会明白。期间正巧有农历七月十五的中元节(鬼节),这在我们当地是一个非常重要的节日,一般会回老家一起上坟祭祖。管理宿舍楼的阿姨因为也要回家,就在早晨和我俩说为了安全,要把我们锁在楼里,第二天再回来给我们开门。我俩便准备了些吃的,准备在寝室睡个懒觉玩一玩再学习会儿。那时候不像现在网络这么发达,即使整天宅在家里也没有丝毫问题。那个时候我们小城3G还没有普及,还是功能机大行其道,还处于30MB流量可以用一个月的时候。这样,我们在寝室怎么也不太安心,也很无聊。到了傍晚,阿姨为了照看我们提前回来给我们打开了宿舍的大门。我们就出去溜达一下,买点晚饭吃。结果我们沿着学校走了一个大圈,听到每家每户的欢声笑语,闻到鞭炮的硝烟掺杂着饭菜香味,最后却发现我们经常光顾的小店没有开张,那是我第一次感觉到孤独,非常想念家的感觉,切身体会到“每逢佳节倍思亲”中饱含的感情,而这个小插曲也让我更加坚定的走下去,坚定了一定要在高二拿一等的信念。

经过一个学期零零散散的学习和一个暑假的集中学习,在高二开学的时候我对NOIP考察的知识基本掌握了,但实际应用解题能力还比较欠缺。我们学校的传统是NOIP复赛前一个月左右停课专心训练来争取拿奖。我抱定了高二拿省一的念头,和家长、班主任及年级主任主动商量多停一个月课来训练,所幸他们都很支持,一路绿灯。而我那个队友,也抱定了这样的念头,虽然他的班主任怕耽误了文化课学习不是很同意,但在他的努力沟通下还是放行了。这样,我们两个又奋战在了机房。这里要说明一点,在高中搞OI的话,一定要争取家长和班主任的支持。由于高中时间很紧,OI对于高考并没有数理化生奥赛似的直接帮助,同时搞OI又需要时时和电脑打交道,家长和老师很害怕孩子是去玩游戏。而各位选手就要主动和他们交流,人对未知的事物总是抱有恐惧的心理,要把什么是OI,训练的时候到底在干什么,学了这个有什么好处主动和他们交流,让他们了解OI,了解你的想法,这样才能创造一个合适的外部环境。

在考试前的这两个月里,主要是通过刷题来训练自己的代码能力,训练自己抽象问题的能力。在这期间,我的刷题速度还是很慢,但我有个比较好的习惯是在遇到一些有价值的题目时不管是自己想出来的还是看了题解的,我都会再把思路重新缕清一下。每次回顾的时候会发现其实在看题解的时候有些细节没注意到或者没有理解其思路,因为单单看了题解很容易顺着作者的描述来走完整个解题过程,看完了之后感觉自己把整个过程都明白了,但其实此时还有一些细节一些逻辑链条没有搞清楚。这个时候就要把解题报告抛在一边,自己从头到尾推算一遍,这样才能把别人的变成自己的,真正从这道题目中学到东西。

经过两个月的训练之后,我们就一起去参加了当年的OI提高组复试。去之前我总共刷了两百左右道题目,比起我的队友来说是少了一些。知识覆盖方面呢,有些比较熟练的,也有些比较薄弱的。那经过我的体验,在比赛的时候什么最重要呢?我觉着是一个“稳”字最重要,因为OI不像其他科目的奥赛还有步骤分,OI使用黑盒测试,一个符号一个字母错了那就错了,而只要能保证会的全部做对就可以拿到省一了。所以我推荐先把题目都看一下,有思路的首先要仔细想好这个方法是否正确,我见过一些同学有了思路为了节约时间立马就开始写,但写着写着发现原先的思路有问题或者有更好的方法,这个时候再去返工就浪费了很多时间。所以,一定不要急着动手写代码,先把方法想好,大致的结构在脑海里有个雏形,磨刀不费砍柴工,这样反而是时间效率最高。确定了解题方法之后还要评估一下实现的难度,因为在3个小时内完成3道题目时间还是比较紧迫的。有思路但是实现起来很麻烦,或者写的时候容易出bug这些都是一些陷阱,一定不要先做这种题目,这种题目可以留在最后,因为有思路让人侥幸,很难舍弃已经花费的时间去换下一道题目,所以会花比预想多得多的时间来做这道题目而结果还不一定对,就没时间做其他题目了。

最后就是拿了省一之后怎么办的问题。当时我拿了省一之后,因为我们学校还没有进省队的先例,所以老师就不推荐继续搞OI,想让我回去好好搞文化课了,我想我也不是天才,也就接受了。不过现在想起来有些遗憾,但也并不后悔,条条大路通罗马嘛。在这里要告诫同学们,拿到省一之后就凭这个去自主招生还是继续努力,向更高层次的比赛进发,大家一定要基于自己的实际情况,包括自己对OI的兴趣,对算法和数据结构的接受和应用能力等,合理地做出自己的选择。做出选择之后就不要犹豫了,无论选哪条路都有风险,认准一条路努力走下去,也总是都能到达目的地。所以归根结底还是要从个人情况出发。

各位同学进入大学以后,如果对OI还有兴趣,还可以参加ACM竞赛。在大学参加ACM竞赛是一件非常好的事,因为到了大学大家的目标不再一致,甚至很多同学没有目标,就是在混日子。加入一个ACM社团可以和一群人向着同一个目标努力,在我看来这是一件非常美好的事情。其次,大学期间没有人再去监督你、督促你,如果没有目标自制力又不好的话很容易浪费时间,而参与ACM,始终有一群大牛在旁边,会形成一种争相向上的氛围。从知识和能力角度,搞ACM可以加深自己对各种算法和数据结构的理解,算法和数据结构是编程的基础,同时ACM是一个含金量和认可度都很高的比赛,这样毕业的时候无论是去工作,出国还是读研,都容易拿到更好的offer。悄悄的告诉各位同学,搞ACM还有个好处是它的比赛非常多,而且都是以省级比赛的名义,这样在申请保研资格的时候会占有很大的优势。

以上大致的回顾了我的OI历程,既是对这段经历一次怀念和回顾,也希望能给即将或正在投入OI学习的学生们一些启发,避免出现我曾经遇到的问题。

张正超于年6月

1
查看完整版本: 我的OI经历张正超深学教育资深教