1. 程式人生 > >NOIP考前的心得體會

NOIP考前的心得體會

最近幾次考試暴露出的問題:
       1. 對思維性的題目,不夠靈活的解決;
       2. 輸出檔案把除錯結果一起輸出,造成嚴重失分;
       3. 考試時間分配不合理,要麼提前做完,不認真檢查;要麼在考試結束最後10分鐘都在修改除錯程式,一題編寫多個程式,提交時卻交錯程式;
       4. 考試心態不好,平時做題好,考試就緊張,思路混亂;
       5. 題目解決方法粗糙單一,找題目的正解需要下功夫。
       6. 學過的東西不能忘,要學紮實,必須要沉澱
       7. 做題時注意細節,認真審題,學會用抽象思維理解題目,對於明知會超時的程式,最好不要在時間足夠的情況下寫(當然用來對拍還是可以的),變數不要用重,考慮各種特殊情況(1寫成i,死迴圈等)
題目資料範圍特坑的那種空間一定要開夠(比如說迷宮之類的)
       對於<還是<=這種一定要思考完善,不要草草了之
以防萬一,結尾加上
fclose(stdin);
fclose(stdout);
return 0;

考試時:
         1、解壓考試檔案(密碼有大小寫)
         2、讀完三個題,做到心中有數。
         3、每作完一題,進行檢查,用想到的所有方法。 做三個題,不如對一個題。

考試前:
        分類整理知識
     帶:身份證(或學生證)、筆、手錶(調準考試機的系統時間)
1、貪心(用圖形表示資料,寫程式碼之前一定要有理有據,能把自己說服,這種題一般資料範圍都很大)
2、分治(二分答案或者歸併排序求逆序對很常用)
3、搜尋(DFS+BFS+ priority_queue優先佇列)
4、DP(幾種揹包問題:01,完全,多重,二維)
5、圖論(幾種最短路徑:Floyed三重迴圈,SPFA用佇列加判重,Dijkstra藍白點每回找最小。最小生成樹:prim(類似Dijkstra,注意dis存的是邊長,最後累加),kruskal(並查集
)。)

NOIP 前必須記住的30 句話
1.比賽前一天晚上請準備好你的各種證件,事先查好去往考場的路線
2.比賽之前請先調整你的螢幕解析度到你喜歡的大小
3.比賽之前請把編譯器的字型調為你平時慣用的字型,尤其是注意這種字型中的逗號,點,1,l 這種易
混淆的字是不是區分明顯
4.在不影響視野的情況下,請將字號儘可能調大,方便查錯. 壓縮包或許還不能解壓,但是檔名已經
可以知道了,在選手目錄下用程式碼模板建好所有檔案,包括.c/cpp/pas、.in、.out
5. 開始比賽,不要急於看題目,將試題第一頁的時間、記憶體限制等等一字不落地看完, 把每題的時空
限制寫在草稿紙上
6. 看題目時不能走神,看完題目後將其歸入某幾個框架中,包括:模擬/列舉/搜尋/貪心/動態規劃/
圖論/分治
請將題目通讀完以後,再開始深入思考你認為最容易的一道題。
7. 根據輸入資料的範圍大致確定演算法複雜度,以下均是可能情況,不絕對:
20:2^20=一百萬,O(2^n),搜尋
100:100^3=一百萬,O(n^3),Floyd/搜尋
1000:1000^2=一百萬,O(n^2),動態規劃/圖論
500000:O(nlog(2,n)),二分答案/二分查詢/快排/歸併
1000000:O(n)或O(1),數學問題/改變思維方向/貪心
即使這道題再容易,也不要著急寫程式碼,請先明確自己每一步要幹什麼後,再開始寫,輕敵會是你最大
的錯誤
8.即使這道題看起來再沒法做,也不要提早放棄,這個時候紙和筆會是你最好的朋友,自己嘗試幾個例
,也許你就會找到答案
9.請一定先明確自己要幹什麼之後再寫程式,不要走一步想一步寫下程式碼前,必須保證有充足的思考
時間,有成熟的想法後再動手
寫程式碼前,儘量用多而強的資料去測試想到的演算法,畢竟程式碼寫完後再測試就浪費很多時間了
不能想一點寫一點,就算是輸入部分也要在整體思路理清後再寫
10.如果這是一道動態規劃題,請先把轉移方程寫在紙上再程式設計
11.如果思考30 分鐘仍一頭霧水,沒有可以實現的演算法,請你果斷遮蔽掉100%的那一欄資料,開始寫
60%,50%乃至30%的演算法——在NOIP 裡面,30 分絕不是小數目
12.如果你發現你旁邊的人寫得很快,請你放心,他的演算法十有八九是錯的
13.雖然1s+128MB 記憶體(這是以前的了,現在應該是1s + 256MB) 是標準配置,不過也不是每道題
都是這樣的,還是請認真閱讀試卷首頁的試題說明
14.計算記憶體的方法:陣列大小*型別長度/1000 / 1000=所佔記憶體MB 數,int 型別長度是4, long long =
8
15.如果對大規模資料的演算法正確性不敢保證。可分段處理:先寫一個暴力程式應對小規模資料,再寫一
個高效程式應對大規模資料。以函式方式實現。這樣也方便後續對拍。
16.寫完程式之後,請一定不要忙著編譯,請一定要將你的程式碼從頭到尾通讀一遍,也就是靜態查錯,這
是整個程式設計過程中最重要的步驟,有的變數重複呼叫問題除錯的話,一個小時也看不出來,靜態查錯可
以一下指出錯誤
17.靜態查錯請注意以下方面:
(1)是否寫上了using namespace std?
(2)陣列開得是否夠大?
(3)變數型別是否正確,答案和中間結果是否會爆int?(記得初始化!!!!)
(4)memset 時,所填的sizeof(XX)的XX 是不是匹配?大小是不是正確?
(5)外層迴圈與內層迴圈的i,j 是不是混用了?
(6)迴圈變數的列舉範圍是否正確,是否會陣列越界?
(7)涉及到邊界處理、加一減一之類的問題,請在紙上舉個例子,標上下標以後,在程式設計時參照紙上的下
標寫
(8)這個程式是在執行你想讓它執行的步驟嗎?
(9)讀入優化處理負數情況了嗎?在小規模資料時請不要讀入優化,反之,則一定要讀入優化
19.通過樣例後,請你一定不要放鬆警惕,因為樣例並不能覆蓋所有的情況,請自己設計幾組大資料,爭取
卡死你的程式。特殊規律的資料,例如全是最小值,全是最大值,單調上升/下降資料最能影響程式效率與
正確性
20.如果出現問題,請你除錯你的程式,請一定要分模組除錯,不要從頭跟到尾
21.如果你已經設計不出能卡住你的程式的資料,恭喜你可以做下一題了
22.如果你用的是windows,請你注意把system(“pause”)註釋掉
23.為了萬無一失,請你用return 0 結束你的程式
24.在記憶體允許的情況下,能開普通佇列就不要用迴圈佇列,能開下普通陣列就不要用滾動陣列
25.在時間允許的情況下,能暴力就暴力,高精度能不壓位就不壓位,優化不需要的就不要
26.總之,在不超限制的前提下,能不優化就不優化,以減少程式碼量和出錯概率為第一原則
27.當比賽還剩下5~15 分鐘的時候,請不要再改動你的程式,即使你懷疑它對你的一個輸入給出了錯誤答
案,因為你自己算出的結果也有可能是錯的
28.這個時候請你檢查是否註釋掉了該註釋掉的東西,檔名是否寫對,資料夾是否建對,請一定反覆檢查!
29.請記住,NOIP 不怕暴力,怕瞎算,不怕不會,怕不敢,有時間的話一定要寫一個暴力程式去對拍,驗
證演算法的正確性
30. 沉著,冷靜,沒有思路上廁所。做能力範圍內的事,盡力就好。不擔心別人強大,小心自己失誤。自己
做得完美,就無怨無悔。

待續......