這篇東西將永遠置頂到我的oi生涯結束,我也會根據實際情況而做修改,希望也能幫助到其他的oier。
一、競賽過程
step1:審題(30分鐘左右)
1、通讀題目
2、對問題在演算法層次思考(注意不要漏掉題目中任何條件)
3、估量題目實現難度(演算法設計難度、程式設計複雜度)
4、按照實現難度從小到大制定做題順序
先做把握大的題,什麼是把握大的題?也就是思路完整,演算法熟悉,易於除錯的題。
(雖然題時由簡單到難,但還是先讀一遍較好,這樣心裡有底,才可以合理分配時間)
step2:構思、編寫**
1、設計演算法、儲存結構(程式模組)
2、驗證演算法(證明或找反例)
3、編寫**(對模組細化)
編碼細心與否,直接決定了下一步也就是除錯的難度。看著自己在紙上寫出的程式框架(一定要有,很重要,可以幫你節約不少時間),小心地把**寫出來,引數盡量使用有意義的名稱。(變數的初始化一定要注意啊啊啊!)
這一步不求快,但求穩,一定不要犯低階錯誤。寫完整個程式後不要急於編譯,先把程式通讀一遍(這一步有很多人都忽略掉,最好不要忽略,很有幫助的),確認無誤後再開始編譯除錯。
step3:測試、除錯
1、設計資料,黑盒測試(資料要全面:劃分等價類,每一類取典型小規模資料;設計邊界資料;
陣列常數設小點,測試陣列越界,但別忘了改回來;有規律大資料測試時空承受能力)
2、除錯
模組化除錯,先跳過過程函式看結果是否正確,若不正確鎖定出錯模組集中除錯
3、靜態檢查排錯
step4:檢查
1、程式名、大小寫
2、檔案輸入輸出
3、陣列範圍常量改回來沒有,其他常量改了嗎
二、關於騙分
方法0、簡單貪心
方法1、輸出特定條件的解
有時候乙個問題條件複雜,我們想不出很好的解法,但是簡化了某些條件以後,解很容易求出。
這樣的題目,我們可以找到條件,使用多個if語句,根據簡化條件輸出問題的解。
這樣的方法往往比簡單貪心好些。
方法2、小規模資料搜尋、大規模資料貪心
例如readln(n);
if n<100 then
搜尋else
貪心方法3、搜尋+貪心
如果問題要求最優解,寬搜的時候可以對於給一步選擇設個估價函式,
只保留估價函式最優的幾個進隊;深蒐時可以設定乙個閥值,超過該閥值
的就不進行搜尋。
關鍵問題有2點:
1、估價函式、閥值如何定
估價函式通常是代表走向最優解的可能性,例如「傳染病控制」一題中
我們只需要列舉孩子結點個數最小的前5個即可,這裡孩子結點個數就是
估價函式。
2、深搜的閥值要由經驗和試驗得出,可以程式產生大規模資料試驗閥值
三、賽前時間利用
競賽開始前一段時間,編寫快排、最短路徑(dijkstra和floyd)演算法
競賽開始之前約30分鐘時間內,快速編出快排、最短路徑模組。即能夠
快速進入比賽狀態、又能夠使用這些模組解題,達到節省比賽時間的效果。
(有助於節約時間,時間很重要)
四、輸出格式
逐字節比較,一行如果有多個數時最後不要多加空格,如果輸出最後一行,
語句應是writeln(...)
附: 比賽技巧
上溢216 一般保護性錯誤
OI比賽的核心
今天和乙個參加csp複賽的家長交流了些事情,所以有感寫了這個。如果覺得不對,歡迎拍磚。山東某家長,小朋友剛參加了 csp j 組複賽,第二題出現 tle 整個山東第二題 100 分只有 5 人。家長說孩子思路是正確的,能否申述。我和家長巴拉巴拉了一大堆,這些不是核心。我告訴家長,oi考試核心是演算法...
OI比賽注意事項(不定期更新)
1.該開longlong的想到就開 不然忘了能哭死你 2.雙向邊開雙倍空間 3.注意可能存在的陣列越界 主要是類似a 1 4.盡量少mod或用減法代替取模 5.自然溢位hash不可取 6.注意比賽的評測環境以區分long long的識別符是lld還是i64d 7.fft等和二的次冪有關的空間要開到2...
OI比賽經驗總結
前面的都是稀里糊塗水過去的就不說了 apio2015 該犯的錯誤都犯了 賽後知道有兩小時ak的選手真是不想玩了 1.比賽策略 本來應該是30分鐘仔細看題 每題10分鐘思考 我只看完題就去打t2了 而且要命的是題目沒看清楚 t3就是那種要思考一下但很好寫的題目 我就犯了毫無經驗的新手式錯誤 先寫顯而易...