OI比賽注意

2021-05-27 07:13:31 字數 1659 閱讀 7085

這篇東西將永遠置頂到我的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就是那種要思考一下但很好寫的題目 我就犯了毫無經驗的新手式錯誤 先寫顯而易...