[考前經驗]NOIP比賽寫程式碼注意事項 -轉載
1.標頭檔案:
常用標頭檔案:
<iostream>
<cstdio>
<cmath>
<cstring>
<cstdlib>
cstdio包含scanf和printf,有的編譯器iostream都包含了,都寫上比較好一般寫程式碼時先都把這幾個寫上去。
較常用標頭檔案:
<algorithm>
<vector>
<queue>
<string>
標頭檔案太多時,容易忘寫using namespace std;我經常忘了輸這一行。
但是用了using namespace std;之後容易產生的問題是:自己的變數名和std名稱空間的變數名衝突,而且在windows下,編譯器不報錯。在linux下報錯。所以自己的變數名不要使用time,next,pipe。如果需要這幾個單詞,可以用Time, Next。當然,time,next,pipe作為結構體的成員名是沒問題的。
2.STL:
STL主要是依靠各種容器和函式來實現各種功能,但是STL有些比較雞肋,比如佇列和棧,手寫很方便,而且快一些,主要就用堆(priority_queue),字串(string)和動態陣列(vector)。
3.陣列:
C++裡陣列出問題可能會出現莫名其妙的問題,所以一定要記得把陣列開大點,並且賦初值。最好是開成全域性變數,因為在main函式裡定義的是區域性變數,給你的空間會小一些,二維陣列隨便一開就爆了。
4.指標:
指標我除了學的時候幾乎沒用過,一般就開個陣列用下標i做指標,比較方便。
5.時間空間資源和精度:
1000毫秒內最大迴圈次數不要超過10^8(10^8有點懸,10^7絕對不超時)。空間限制在128MB時,陣列元素型別為int時,元素個數最多千萬級別(約3*10^7),要定義在到main函式外面的全域性變數區(二維陣列的兩個維度大小要相乘)。
6.資料範圍
有的題目,比如深學遊戲一題,多個數相加,每個數的最大值就到了1e9,那麼存放和的變數就必須是longlong
有的題目,比如求最短路徑的題目,邊權的最大值都到了1e9,並且更新最短路徑時時兩個邊權相加,結果就是2e9,那麼我們在為dist陣列元素賦值為無窮大時,應該設多少呢?我們的無窮大可以是1e9+1,或者0x3f3f3f3f=十進位制1061109567, 0x7f7f7f7f=十進位制2139062143,int 的範圍是-2147483648 ~ 2147483647。所以以後我們程式中的無窮大就定義為1e9+1或0x3f3f3f3f
7.千萬注意輸出格式和大小寫問題
比如注意題目要求每個輸出結果在同一行,還是在不同行;或輸出yes no right impossible等英文提示時要求首字母大寫。比如 洛谷1443 馬的遍歷 輸出要求 左對齊 佔位5
8.建立圖的鄰接矩陣和鄰接表時,注意單向邊和雙向邊,重邊,自環等情況。