oi考試技巧(2) : 遺憾丟分
遺憾丟分
1.語文問題
最好的選擇是讀完題,按照自己理解的題意模擬一下樣例,判斷是否正確,可以使讀錯的概率小很多。
2.資料範圍看錯
有的時候是少看了一個限制條件,有這個條件能好做很多。有的時候是對自己太自信了(對於太自信的問題,以懷疑的態
度審視自己挺有用的)。
因為現在oi系列比賽部分分設定的實在是非常繁雜,先嚐試記住各種部分分在想題目解法很容易出問題,最好就是先想做法,然後再看看自己的做法對應到資料表上能得多少分。
3.邊界情況漏判
比較經典的有極小的邊界情況,N=1或者N=0。
當你對一個問題不是非常拿得準但是感覺也差不多時,而邊界情況比較好算或者好寫時,邊界情況多判判沒有害處,畢竟我們可以用來對主程式的進行一定的驗證。
不管你最後程式碼上是否把邊界情況特殊處理,邊界情況一定要在做題的時候想到,一定要想。
4.圖論問題
沒有考慮重邊和自環。
沒有考慮圖不連通。“我們給出一個n個點n-1條邊的無向圖”曾以為出題人心中只有那唯一的一棵,沒想到他還有好多環套樹。
Tarjan強連通分量只dfs(1)了?
並查集沒初始化?
5.複雜度分析錯誤
以為自己想到正解,寫了半個小時才突然發現複雜度不對,或者是這個做法空間竟然開不下?!
想出來一個方法,但是總感覺複雜度不對。結果考完了你發現均攤時間複雜度來算它就對了,追悔莫及。
6.取模
兩個int乘,先強制型別轉化為long long 再取模。
注意一個單獨的數字是int型別的(1,2,123124),要是乘法有單獨的數字注意在數字後面加ll,(1ll,2ll,123124ll)這樣就是longlong型別的了。如果是前者,乘一個變數變成大於int的話也是會出問題。
這個取模問題可以在寫完整個程式碼之後單獨查一遍,單獨查!因為寫程式碼的時候需要注意的東西太多,就算很仔細也可能會漏下一個小問題,然而小問題就可以讓一道題目完掛。
模數是合數,直接費馬小定理了?
7.忘記預處理或者是沒有呼叫預處理函式
這個一般是能在測樣例的時候找出來,只不過把時間花在忘記呼叫預處理函式上就有點不值得了。
8.排序沒加cmp
9.忘記開long long
注意50000*50000在int下是開不下的。
int和long long混用的時候要尤其小心。(但是我不建議全文long long)
輸入輸出不要忘了用%lld,打成%d很尷尬。
10.Double問題
輸出要用%lf,%f是不對的。
浮點數直接強制型別轉化為int是向絕對值小的方向取整,不是四捨五入!!!!
%.0lf是四捨五入保留到0位小數(保留整數),也不是取整,
取整的時候要用ceil和floor。
11.陣列大小沒開對
單獨查。
12.資料忘記初始化
多組資料忘記清空所需要的陣列,或者是tot,ans,cnt等計數變數。
memset只能賦一些特殊的值,(0,-1,0x3f3f3f3f——一個大約1e9的數),不是想賦值成什麼都行的。
資料組數很多,但是每組資料都比較小,然後每次都memset導致超時。
單獨查。
13.除錯資訊沒有刪除
最後五分鐘把要最後交的程式碼再檢查一遍。
14.卡(qia)常
考試少用點stl
選常數小的資料結構