今年已經高二了,2010年的市選已經結束,還有一個月,我將迎來省選。這時候突然感到特別絕望和無助,沒有上一次準備競賽時的狀態,反倒多了一絲不好的預感。此刻不想考慮程序和一行行的代碼,卻很想記錄下高中以來的OI。
2008年10月左右,開始接觸計算機編程,學習C語言。
兩個星期的時間,學習了一點點基礎,參加NOIP2008,初賽滿分100分,我得了25分,沒有進入復賽。
之后查了NOIP2008安徽省的成績,滿分400分的題目閆令琪330分全省第二;之前一次坐公交車也聽說了一些事情;沒有想到竟然是同一個人。當時還不認識他。
之后的幾個月里,一直被C語言的基本語法困擾著,其中指針是我認為最難的。寒假的時候看完了吉林大學康輝教授的48集C語言教程,教程基本上是很基礎的,但是加深了我對遞歸的理解。這一階段一直在學習著一些基礎問題:選擇結構、循環結構、動態內存的分配……現在回想起來,自己浪費了一些時間在一些用處不大的方面,比如數組和指針。
在那年學校開聯歡晚會的那天中午上學的時候,我去新華書店找到了一本《密碼傳奇》,此書主要介紹二戰時期的密碼戰。寒假的時候根據介紹編寫了幾個加密和解密,我直到現在都認為是這些程序奠定了我的編程基礎,這可能是我做的最早的“字符串處理”類的題目吧。
2009年1月左右,第一次登陸了vijos,認識了在線測評系統,感覺上面的題目好難。
差不多也是在這個月,逛新華書店時發現了一本《全國青少年信息學奧林匹克聯賽培訓教程(中學高級本)》,書上給的代碼是Pascal語言寫的,看上去雖然不習慣,但還是能看懂吧。買這本書的原因很簡單:在此之前,我一直認為貪心和動態規劃是很難而且很重要的,因為經常聽別人提到貪心和DP,而且有些最優化問題需要依靠這兩種想法來解決。翻開目錄第三章就是貪心,后面幾章還有動態規劃,于是就買了。
現在看來對此書內容實在不敢恭維,大大限制了讀者的思維。但是,畢竟還是扎實了我對基礎算法的掌握,讓我對信息學競賽有了一個更全面的了解:不僅僅是C語言,也不單動態規劃,還有圖論、搜索、剪枝、數據結構、組合數學……
2009年3月左右,也就是去年的這個時候,老師通知我參加信息學競賽阜陽市選拔,參加的時候沒有想到能進復賽。試題總共7道題,每題100分,我做了4道題,當時也沒有數據規模的概念,以為只要答案正確不管效率如何就能拿滿了,當時快速排序、二分查找都不會,就會一個冒泡排序和線性查找(線性查找說得挺邪乎,就是從前向后找,找到為止),更別說動態規劃、圖論和搜索了。不過我發揮得還算好,會的都用上了。保守地估計了一個350的分數,結果才得了290。但是卻出乎我意料地全市第三。
之后開始準備省選,按照我的觀念,我自然從動態規劃開始學。
記得那個月的某個下午,和高我一屆、市選第二名的學長sqm一起吃飯,他問我最近準備從哪個方面復習(那時的我哪談得上“復習”),我說我在學動態規劃,他勸我學習深度優先搜索(DFS),說省選的動態規劃很難,臨時學沒有意義。我那時知道,那個比賽叫“省選”。
之后開始學DFS,大概學了幾個星期。在此期間,我試圖用動態規劃解決市選中我沒有完成的第五題,但是失敗了,對第六題更是沒有思路,無奈只有先放著。
又從網上訂了一本《數據結構與程序設計——C語言(第二版)》,差不多把前幾章都看完了。現在真的驚嘆于當時的理解力和記憶力,許多內容幾乎看過一遍就不會忘記。
4月底,坐上了去蕪湖的火車。在火車站,第一次見到了城郊中學的wxy,比我高一屆。在火車上,我了解到了NOIP2008時sqm和wxy的成績,多說一句,直到NOIP2009復賽的時候,我才知道為什么他們當時會得到那么不滿意的分數。wxy說市選第五題是貪心,我當時百思不得其解,始終不能理解。
記得在省選的前一天晚上,我和sqm把wxy的《算法藝術與信息學競賽》這本書借來,sqm似乎對數論非常感興趣,我們一起看miller-robbin素數測試,他當時提出了一個關于p很大的情況下會溢出的疑問,當時我對此也感到不解。現在回想,真的是很簡單的問題。
省選分兩試,總分600,一試我的得分是0分,二試的分數老師似乎是安慰我說了30分。
省選回來之后,我從網上訂了一本《算法藝術與信息學競賽》,翻看了前幾頁就看不下去了,純理論沒有代碼,內容很深,于是還是決定看《培訓教程》。
再次回想,還是《算法藝術》的內容比較有深度和啟發性,《培訓教程》雖然易懂但是卻很有局限性。
wxy在省選中取得了不錯的成績,全省十幾名,回來之后在城郊中學辦了一個模擬賽,自己出題,邀請別人來考。我也去了,400分的題目考了280分,在那里認識了初中的幾位選手,包括和我一個班主任的十五中的幾位、還有初中其它學校的。
之后的一段時間一直是在慢慢地學習、偶爾到vijos上做題、參加模擬賽。
到了暑假,閆令琪在高考中取得了全市最高分,辦了一個輔導班,我也去了。那兒的氛圍很輕松,和平常上課很不一樣,一人一臺筆記本,課想聽就聽,不想聽玩電腦。許多內容我確實認真聽了,收獲很多。
這個暑假進步很大,在各個方面:思考問題的方式、動態規劃、搜索、圖論、數論……其中我認為最重要的就是思考問題的方式,其它的都是次要的,方法才是本質。
轉眼間暑假過完了,到了9月份,這意味著我即將迎來新一年的NOIP!初賽是筆試,還要背許多計算機常識,什么人工智能之父、計算機之父之類的內容。
初賽在十五中舉行,回到母校,突然感覺很熟悉,坐在教室里,感覺就像九年級月考一樣,見到了一個初中同學。又想到了我九年級的八次月考,熟悉了八次的第一考場。
初賽有點不按常規出題……但還是進了復賽,依然是第三。
之后是每周一次的集訓,每次做2-3個小時題目,做過之后立即排名,我記得我第一次集訓是第一名,之后在1-3名之間徘徊。
到了11月21日的復賽,這天是yx的生日。上午結束了3個小時的競賽,回去的火車上給yx發了一條短信。在之后的一段時間里甚至是現在,我都覺得那3個小時驚心動魄,第三題很久沒有思路,想到枚舉,寫了100多行的代碼但是運行時卻出錯,當時的放棄真是最冒險也是最正確的決定了,果斷地開始了最后一題。后來看成績的時候,發現自己最后一題得了全省最高分,比這題的第三名高出50分,也就是靠最后一題才取得了全省第七的名次。忘了當時是如何決定放棄的,要知道,如果放棄一道題目,可能就不是一等獎了。就結果來看,如果不放棄,我真的不是一等獎了。
sqm、wxy同時獲得省一等獎。
準備復賽的那段時間真的很辛苦,每天都要熬夜到十二點多,奇怪的是白天也不困,中午很多時候也不睡覺,走到哪想的都是算法和代碼,每天抱著《算法藝術》和《培訓教程》。
回想起來,最終不錯的結果和我有計劃的復習可能也有一定的關系(大半年之后的我真的算是“復習”了),把基礎練習得很扎實。
NOIP2009圓滿收場,之后的半年內我更多關注的是大學的招生信息,決定自己應該報考哪所大學的保送生考試,文化課方面也有所進步,編程方面沒有花太多心思,偶爾看看算法、做做題。
1個月之后就是省選了,確實感覺到時間的流逝了,此刻再次想起了伽羅華的那句“我沒有時間了”,語文老師教給我們許多惜時的名言,我覺得都沒有這句話說得最真摯。這一年的時間里經歷了太多的事情是我需要記錄下來的,也正是出于這個目的我才決定寫這篇日志。
忘記了當初是什么原因才有了一閃而過的念頭:“參見信息學競賽。”如果有重新來過的機會,我不會選擇孤身奮戰,我不會選擇信息學競賽,可能會選擇數學或者物理競賽,我希望有一些能夠交流的朋友而不是自己一個人在漫長的黑夜坐在電腦前飛速地敲擊著鍵盤……
在這將近兩年的時間里,我確實改變了很多,許多的磨礪讓我愈發收斂了當初的銳氣,這種“收斂”決不是“謙虛”,也算不上“自卑”,是真的能夠看到自己身上有許多不足,想到了在一本書上看到的話“現在的高峰絕不是頂峰,有人在更高的地方看著你”。
高中的OI生涯即將結束(如果NOIP2010我不參加的話),希望我市在今后能夠取得更好的成績。這次省選之后,一中的學生如果需要資料的話可以隨時向我借:
《程序算法與技巧精選》
《數據結構(C語言版)》
《數據結構與程序設計——C語言(第二版)》
《算法競賽入門經典》
《全國青少年信息學奧林匹克聯賽培訓教程(中學高級本)》
《挑戰編程 程序設計競賽訓練手冊》
《計算機數學基礎》
《算法藝術與信息學競賽》
《信息學奧林匹克競賽國際國內分類試題精解(2003-2004)上冊》
《信息學奧林匹克競賽國際國內分類試題精解(2003-2004)下冊》
《程序設計中常用的解題策略》
《國際大學生程序設計競賽例題解(五)》