拿到題目先寫裸的暴力,暴力必定要寫對,沒想出正解有暴力墊底,想出了正解也能夠拿來拍html
過了樣例以後必定要造數據測,數據越坑越好算法
必定要造極限數據,哪怕造不知道答案的數據都行,主要是檢測RE和TLE,正確性用拍來檢測數組
若是目前已經能夠拿到很高的分,能夠考慮放棄剩餘的小分數,把時間留給其它地方數據結構
題目必定要認真仔細看清楚,堅定避免代碼寫完告終果題目看錯的狀況優化
樣例必定要手動分析一遍,或許分析的過程當中就能找到思路,同時分析樣例也是幫助理解題意spa
簡單的題目要照簡單的方法作,不要想着一些高大上的東西,只要能過就行htm
注意數組的大小,在不爆空間的狀況下寧願開大一點blog
遇到題面很難讀懂的題目通常都是水題,只是它的外表迷惑了你隊列
特殊的數據要寫騙分,好比m=1或者k=n之類的字符串
代碼裏用 if 判斷選擇不一樣數據範圍,小的數據用暴力,大的數據寫正解,這樣是最保險的
想不出來的必定不能空着,哪怕猜個結論,輸出個n/2,隨機一個數均可以
連通性想到並查集,這是很優秀的一個數據結構
DP方程能夠作變形,從中發現是否具備單調性,或者能夠作斜率優化等等
對於一個正整數n,能夠用二進制來表示,也就是每一位能夠用若干個2k相加來表示
範圍給的很小的題目正解一般就是搜索,若是搜索跑不出來能夠想一想狀壓DP
只有一個數字的輸入或者範圍給的太大(如n=231)每每可以O(1)地作,並且通常這種題目可以打表找規律,或者推出O(1)的公式,或者根據n來騙分也能夠;若是公式推出來是O(n)的可是答案是有規律的,那麼能夠分段打表
哈希值要定好,兩個大的哈希模數是109+9和109+7,乘的p取6-8位的質數,能夠用106+7和106+9
求最值題先想貪心,再想DP,二分答案,若是想不出來正解能夠貪心騙分
DP發現時間複雜度不對可是優化不了的時候,能夠隨機前面的狀態轉移,隨的次數根據時間去計算
貪心要去證實它的正確性,能夠找反例,或者拿暴力去拍
正確性不肯定的算法必定要拍
通常題目都不會卡SPFA,有時SPFA比Dijkstra+堆還快
在判斷 x>0 的時候必定要想 x 會不會有負數的狀況,若是有負數單單寫個 if(x) 是錯誤的
字符串千萬別用gets讀入,scanf("%s") 是以空格或者回車做爲字符串的結束標誌
許多二分棧能夠優化成單調隊列
記憶化搜索容易寫,不用想DP的拓撲關係,缺點是沒法剪枝,因此要算好複雜度
歐幾里得距離是實際的距離,曼哈頓距離是橫縱座標差的和,切比雪夫距離是取max(橫縱座標差),也就是國際象棋王走的最短距離
DP找不到單調性的時候能夠把狀態打出來,尋找它的單調性
經典的模型必定要會寫,並且要寫得熟練
DP的轉移能夠用數據結構維護以前的狀態
有些題目的正解就是從暴力一步步推出的,或者是一些特殊數據的算法的結合版
最長先後綴能夠用KMP的預處理線性得出
帶條件限制的最短路能夠增長一維狀態來作
對於0,1之類的小數據要作特殊判斷
數據範圍是n<231時不能直接 for(;i<=n;i++),由於i=231-1時再i++就會變成負數
通常有最優性剪枝的搜索均可以卡時
若是對於每一個詢問都要作相同的預處理,能夠把連續的詢問放在一塊兒預處理,這樣效率會高些
題目要求選擇一些特殊的點時,將這些點加上或者減去一個數會影響答案,那麼這就能夠進行二分
裸的數據結構題先打暴力,通常這類題的正解又臭又長,很難短期內寫對
相似於八車問題,能夠用把行和列拆成點作二分圖匹配
若要求數列中某個數不爲其中兩個數之和(或同一個數的兩倍),那麼最多能夠放的數爲最小的數的值
代碼一邊寫要一邊想,爭取一次打對
貪心證實是錯的題目,或許可以貪心+調整作
若是實數比較要求輸出3位,必定要輸出4位及以上,總之要比它至少多一位
long double不能直接輸出,要轉成double再輸出
整數除以整數,即使是賦值給實數,獲得的也是整除的結果
式子裏至少有一個long long,否者會爆int
若是下一行要讀入字符串,那麼這一行的scanf("%d",n)要加上\n變成scanf("%d\n",n)
每道題均可以加讀入和輸出優化
一個環能夠複製一遍接到後尾成一條2n的鏈,這樣能夠選斷點的時候操做更簡便
若是一個點爲兩點之間的必經點,那麼刪去這個點會致使這兩點不連通
要求乘積的最值,能夠轉換成把每一個取對數相加的最值
樹上倍增轉移值時,g[j][i]=g[j][i-1]+g[f[j][i-1]][i-1],右邊g的第一維中爲f(祖先),不爲g
若是在拍中還輸出了別的東西,提交的時候必定要改回來
在最終提交前,要把全部代碼都測一遍樣例
在我的文件夾下建子目錄,外面也要放源程序
若是有多組數據,能夠把樣例合在一塊兒再測一遍
若是long long加了讀入優化,讀入必定要改爲long long,也就是說換了類型的變量在全部讀入和輸出中都要換
卡時的地方判斷必定要是 if (clock()>TL*CPS) 一個不能錯
版權全部,轉載請聯繫做者,違者必究