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大綱。
我這里也可以大致提一下
- 基礎算法
- 如二分、遞推、貪心、排序。很多小的算法,通用的思想。雖稱做
- 搜索
- 大的方面分為BFS和DFS。是想不出正解的時候,打暴力(非正解)拿部分分的好手。(然后我這方面很弱,哭)
- 數據結構
- 基礎數據結構,如棧、隊列、鏈表、堆。
- 高級數據結構,如並查集、樹狀數組、線段樹。
- 這里分為基礎和高級,主要是由其實現難度、思維難度決定的,數據結構多用於算法的優化或對題目特殊性質的使用。
- 數學知識
- 如線性篩質數、約數相關、同余、博弈論、逆元。這方面我就比較弱了qwq
- 動態規划
- 簡稱DP,個人認為是最具思維難度的類別。沒有死的模板,只有根據題意找到狀態表示與狀態轉移方程得以求解。
- 圖論
- 如最短路算法(dijkstra、spfa)、最小生成樹(kruskal、prim)、最近公共祖先問題。主要是找到建圖方式。實現方式比較模板化,但重在分析。
- STL庫運用與對拍
-
STL庫中有很多好東西,set、map、優先隊列priority_queue等。
-
對拍程序用於檢查。
- 不清楚自己寫的時間正解的程序是否答案正解,與自己寫的另外的答案一定正解的程序,運行同一組數據,比較輸出是否一致。
- 題目的輸出很長,不易人眼比較是否一致,用程序比較。
-
- 基礎算法
-
OJ推薦
洛谷、AcWing、hdoj、poj、vjudge、codeforce、atcoder。
洛谷可以通過題單來練習鞏固知識點還有月賽和別的小比賽,AcWing課程+周賽,vjudge也有前輩整理的題單,cf和at主要是打比賽。(多打比賽,比賽經驗少太虧qwq)
-
最后不知道怎么分類的建議遇到問題無法解決,獨立思考后可以通過百度、blog、題解、在算法交流群問、問前輩們(不一定是本校的,網上群里的好友自然也可以)
建議有事沒事多做做題,多打打比賽,畢竟平時做題和比賽做題還是不一樣的。
可以學學markdown語法,做完題發發題解總結一下。洛谷、AcWing、博客園、自己的網站都可以用來發。
想要常來機房可以要一下機房鑰匙之類的。
還有很重要的一點,文化課不要荒廢了。畢竟到最后的最后最重要的一定是文化課(高考)。
