[AFO]对近三年的OI生涯的回顾

AFO && Never AFO

  不知不觉已经与OI共处了两年多了,在高中信息学竞赛中,我收获到的东西太多太多,不只是算法、思维方式之类,更有性格、交友上的潜移默化的影响。NOIP2021已然结束,我的OI生涯也画上了句号。谨以此文尝试记录那段时光,和那段时期的个人感觉。~~所以更会像是个人回忆录?~~ 也会在其中谈谈我对学习OI的拙见。

Hello World!


cout << "Hello World!" << endl;

这一行代码,是无数人学习C++打的第一行代码。

我当然也不例外。

在高一的时候,高二的学长们 (没有学姐 哭) 来招信息学竞赛,学长们幽默风趣的语言让所有人都对这个新事物感到无比的好奇,自认为电脑能力尚可 (指会玩游戏hh) 的我自然也跟风参加,只想把它当作自己业余的兴趣爱好罢了。

一开始人很多,一晚上分了两批人上课,两次机房都爆满。

几次之后人就开始少了下来,毕竟不是他们心中的单纯的玩吧。陈老师教我们C++的语法,然后我们在学校OJ上做题,然后遇到语法问题就去问同学或者去隔壁机房问学长。当时因为语法原因而抓狂的感觉可是真的难受,因为没有做到苏州百题的100题不能去隔壁有网的机房,并不好百度什么的解决,但还是坚持了下来。

中间忘记是哪段时期,陈老师推荐了刘汝佳的《算法竞赛入门经典》,那时候因为公交车上过于无聊,就看书上的题目然后用铅笔在上面写思路,想到哪里写到哪里的感觉确实很棒。虽然回到家,我还是很颓的,并没有太多题真正用代码把它实现出来......(做题网站不清楚也是其中一个原因,没有AC的刺激)

之后陈老师开始讲算法,因为一周只有一个晚上,我们那时候进度其实很慢,但前人创造的算法的美妙确实是烙在了心中,“怎么可以想到这样”“这也太妙了”都是那时候的心中最多的想法。还记得最初学单源点最短路算法——dijkstra的时候,老师讲的那天晚上怎么想都想不明白,回寝室睡觉也还是很痛苦。第二天,吃过早饭后,刚要走入学校小花园的时候,突然一张图,一张仅仅由一个个点和一条条边组成的无向图,停不下来的浮现在我的眼前,在我眼前加粗的边不断代替着细边,最终1号点直接或间接的连向了所有点。我瞳孔放大,惊叹于自己终于理解了。嗯,其实就是很简单的道理罢了。我现在也不知道为什么当时理解dijkstra会这么困难,但当时那种喜悦真的难以忘怀。

在一个个晚上的学习中,我逐渐意识到我好弱啊,真的蒟蒻,理解力真的就比其他人要差!那时候还挺为这个难受的,现在想想其实我最终也学会了我的那一份不就好了嘛。

然后那时候还有让我影响深刻的就是我连续近1个月作业都没办法当晚直接上交,都是第二天早送到办公室的。(现在想想,并不是单纯因为作业挺多,我往机房跑,更多还是上课没有完全吸收+下课和同学play&chat去了)那时候中午吃完饭去机房待一会儿,晚饭后也去机房待一会儿。(主要是挺多人都去,然后也就去咯)

疫情与“人员流失”


很不幸,在2020年,我们遇到了新冠肺炎疫情,让原本就拖后的课程更加雪上加霜。更严重的是那时候剩下的三四十多人,因为疫情对代码失去熟练度或者是兴趣,人数直接夭折。我记得刚再打代码时,数组的中括号、for循环的格式全都“木大”。

返校之后,晚上课照样还是上着,只是人少了好多啊。

初参赛


为了准备初赛,陈老师组织我们在暑假时候来到学校进行集训。主要内容就是做历年初赛题和打代码了。

这一年的复赛很冷清,我神奇的狗进了提高组,小C和yibooo进普及组。冷清的三人游。

这一次参赛对我来说,确实就是一个语法组的蒟蒻靠RP进了提高组,考得很烂,但只能说那年初赛、复赛都RP太好了,有幸得奖。

自学知识点之旅


第一次参赛后,我对信竞的态度大为改变,从之前的不是为了获奖心态,变成可能带有想证明一波自己的心态。然后,只是将自己的“弱因”归咎于知识点没学。(到后面越发觉是误判,不过这就是后话了)

开始刷AcWing上的课程,在学校的每天都开始抽时间去看课程,虽然现在看来不是一条最正确的答案,但那时候,每天最后一节下课,跑向食堂,再跑向机房的生活还是深值回味的吧。

一些建议


  • 心态

    要明确自己想要通过信息学竞赛获得什么,从开始就摆正心态,不要想我一样半路再坚定下来。

  • 知识点学习

    竞赛毕竟是竞赛,最终还是归到一个“考”字上。关于考试的知识点可以参照noi官网的noi大纲。

    我这里也可以大致提一下

    1. 基础算法
      • 如二分、递推、贪心、排序。很多小的算法,通用的思想。虽称做
    2. 搜索
      • 大的方面分为BFS和DFS。是想不出正解的时候,打暴力(非正解)拿部分分的好手。(然后我这方面很弱,哭)
    3. 数据结构
      • 基础数据结构,如栈、队列、链表、堆。
      • 高级数据结构,如并查集、树状数组、线段树。
      • 这里分为基础和高级,主要是由其实现难度、思维难度决定的,数据结构多用于算法的优化或对题目特殊性质的使用。
    4. 数学知识
      • 如线性筛质数、约数相关、同余、博弈论、逆元。这方面我就比较弱了qwq
    5. 动态规划
      • 简称DP,个人认为是最具思维难度的类别。没有死的模板,只有根据题意找到状态表示与状态转移方程得以求解。
    6. 图论
      • 如最短路算法(dijkstra、spfa)、最小生成树(kruskal、prim)、最近公共祖先问题。主要是找到建图方式。实现方式比较模板化,但重在分析。
    7. STL库运用与对拍
      • STL库中有很多好东西,set、map、优先队列priority_queue等。

      • 对拍程序用于检查。

        1. 不清楚自己写的时间正解的程序是否答案正解,与自己写的另外的答案一定正解的程序,运行同一组数据,比较输出是否一致。
        2. 题目的输出很长,不易人眼比较是否一致,用程序比较。
  • OJ推荐

    洛谷、AcWing、hdoj、poj、vjudge、codeforce、atcoder。

    洛谷可以通过题单来练习巩固知识点还有月赛和别的小比赛,AcWing课程+周赛,vjudge也有前辈整理的题单,cf和at主要是打比赛。(多打比赛,比赛经验少太亏qwq)

  • 最后不知道怎么分类的建议

    遇到问题无法解决,独立思考后可以通过百度、blog、题解、在算法交流群问、问前辈们(不一定是本校的,网上群里的好友自然也可以)

    建议有事没事多做做题,多打打比赛,毕竟平时做题和比赛做题还是不一样的。

    可以学学markdown语法,做完题发发题解总结一下。洛谷、AcWing、博客园、自己的网站都可以用来发。

    想要常来机房可以要一下机房钥匙之类的。

    还有很重要的一点,文化课不要荒废了。毕竟到最后的最后最重要的一定是文化课(高考)。

上一篇:C++ Primer----一个关于 vector 的有趣的问题


下一篇:Acwing 93.递归实现组合型枚举