1. 程式人生 > >oi考試技巧(2) : 遺憾丟分

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

  選常數小的資料結構