清北學堂信息學金牌教研團專門請來IOI金牌許昊然來傳授自己的學習祕笈,看看信息學金牌是怎麼學習的。

許昊然是個信息學達人,兩次獲得國際信息學奧賽金牌。看過電影《阿凡達》後,許昊然曾連續花了幾天時間自己搗鼓一個「光的追蹤」程序。「當時編寫了上千行的程序,不斷地修改運行,因為程序複雜電腦高速運轉,還差點把電腦『燒』掉了。」許昊然說,就是因為對信息學的癡迷,讓他在一次次競賽中脫穎而出,這也是麻省理工大學選擇他的主要原因。

曾獲NOIP 2012一等獎(590分,江蘇第一名)、NOI 2012金牌(485分,全國第19名)、IOI 2013金牌(世界第三名),高一獲清華保送資格,2014年被美國麻省理工學院錄取。

Part I. 賽場策略與技巧

* 首先,如果你的水平已經遠超NOIP,自然是想怎麼考怎麼考了。

* 同理,如果你什麼都不會,那麼策略再好也是沒用的。

* 因此,下面說的策略、技巧主要是針對水平中等,遊走在分數線附近的同學們的。

清北學堂信息學金牌教研團總結出,賽場最終目標就是一句話:多拿分。

這是考試,為了分數應當使用任何你能想到的手段。(當然作弊啥的除外......)

多拿分,具體來說就是兩部分:

* 會做的subtask不丟分

* 不會做的subtask多騙分

會做的subtask不丟分

subtask就是每道題目裏各個部分分。如果一個subtask你會做,比如遇到了水題,或者某道題你會寫30分的小數據,那麼請務必確保你能拿到這部分分數。

以及,不要嫌分數少而懶得寫!30分也是分,10分也是分,在分數拉不開的情況下(如果你水平並不優秀,這就是你總是要面對的情況),10分的差距就決定了你是一等還是二等。

清北學堂信息學金牌教研團提醒您如果你因為粗心大意,一個簡單的subtask沒拿到分,你就不得不依靠更難的題目來把這部分分數拉回來。

舉個例子,某A,第一題因打錯文件名爆零,其餘兩題滿分。某B,只會前兩題,第三題寫了樸素得30分。最後A得200分,B得230分。難題和水題都是100分,評獎可不管你到底寫對的是難題還是水題。

清北學堂信息學金牌教研團請大家記住:在大多數OI比賽中,只要暴力分全部拿到,就是一等獎 (或金牌)。

但問題是,大家都會寫暴力,為啥一等獎只有總名額的10%呢?因為大多數人都會把暴力寫錯,或看暴力分少懶得寫。如果你正確寫出了所有暴力,不出意外你就是一等獎了。

騙分的問題

所謂騙分,就是用錯誤的演算法拿到分數。按照往年NOIP的經驗看,NOIP的數據一般都不強。騙分拿到80分以上甚至滿分的分數很常見。

數據是死的,人是活的,出題人是懶的。

數據是賽前就出好的,出題人並不知道你可能會用什麼錯誤的演算法騙分。

騙分演算法五花八門,你的各種錯誤的亂搞演算法,會讓出題人很頭疼。

加上出題人一般很懶,再加上NOIP一般每題只有10組數據,你的各種亂搞演算法往往都是有收穫的。如果你能想出一個出題人很可能沒想到的亂搞演算法,那你的收穫往往就更大了。

下面是清北學堂信息學金牌教研團的舉例,供大家參考

常見有效騙分演算法試舉例:

* 若干個錯誤的貪心、動態規劃取最優解——一個數據同時卡掉多個錯誤演算法很難;

* 暴力演算法加奇怪剪枝——出題人不一定想得到你的奇怪剪枝,因此不一定卡的掉;

* 基於某些東西的暴力(比如樹上的題目和深度有關、和點的度數有關的暴力等)——原因同上;

* 代碼的常數優化——配合上述優化,進一步增加卡過去的可能性。

一些清北學堂信息學金牌教研團覺得很有效的技巧:

如果想一道題想了很久(比如20分鐘)都沒有想法,建議去上個廁所放鬆一下。如果發現了一個可能有用的性質,建議去上個廁所放鬆一下。如果想出了某題的演算法,建議去上個廁所放鬆一下。如果寫完了某題的暴力,建議去上個廁所放鬆一下。如果寫完了某題的正解,要開始對拍了,建議去上個廁所放鬆一下。如果對拍掛了/通過了對拍,建議去上個廁所放鬆一下。

如果去廁所不方便,或者覺得太浪費時間,也可以用在座位上伸懶腰、深呼吸什麼的代替。目的只有一個:不要讓自己長時間陷入某項工作(思考、調試)中。

原因一是人在長時間思考或調試時會效率下降,而且容易「鑽牛角尖」,陷入錯誤的思路中;二是時間也會不知不覺中過的特別快,容易出現類似「臥槽考試只剩一個半小時了還一點想法沒有怎麼辦」這種很糟糕的情況。

因此,如果你想了一段時間卻毫無想法/調試了很久找不到問題所在,請務必從中跳出來,換一個思路,切勿陷入其中,白白浪費時間。

清北學堂信息學金牌教研團總結:

會做的題不要寫錯!

不會做的題,要寫暴力!要騙分!

不要鑽牛角尖,高效利用時間!

無論發生什麼,保持心態穩定!

Part II. 注意事項、低級錯誤舉例

1、關於NOI Linux

聽說NOIP也統一採用NOI Linux系統了。考慮到這裡大部分同學應該沒用過這玩意,以下是一些注意點:

* NOI Linux似乎安裝比較麻煩,如果想自己熟悉環境但不會裝,用虛擬機裝Ubuntu也可以,界面什麼都一樣的。

* 據說考場是windows下裝NOI Linux虛擬機,能適應NOI Linux環境最好,但如果不習慣想直接在windows下編碼,請務必記得提前測試能否在實體機和虛擬機之間拷貝文件! 否則寫完程序發現拷不進虛擬機交不上去就真麻煩大了。

* Linux下64位整數輸出是%lld而不是%I64d,不要弄錯了。

2、OI中犯低級錯誤丟分是很悲劇的,也是很不應該的。

下面是一些常見的低級錯誤,望大家避免:

* 文件名打錯/忘記用文件輸入/忘記用文件輸出/忘記關文件;

* 數組開小;

* 爆了內存限制;

* 運算時爆int,忘記強制轉換為long long;

* 對答案取模的題目有地方忘記取模;

* 輸出時格式錯誤;

* 輸出64位整數時沒有用%lld;

* 提交時交錯文件/打錯擴展名;

* 等等等等......


推薦閱讀:
相關文章