部分來自百度百科、其他的博客
一、必須會的
1.暴力:
DFS、BFS、灌水法搜索、回溯搜索、記憶化搜索、啟發式搜索、最優性剪枝、可行性剪枝
2.貪心
3.模擬
4.騙分
二、基礎算法
1、圖論:SPFA、Floyd、Dijkstra、Tarjian、topo排序、Prim、Kruskal
歐拉(回)路、哈密頓回路
2、樹:並查集、堆、線段樹/樹狀數組、LCA
3、分治:二分查找、二分答案、求逆序對
4、數論:GCD、BSGS、擴展歐幾里得求同余方程、Catalan數、快速冪、快速乘法、差分約束、篩素數
5、字符串:回文串的判定、KMP、hash
6、動態規划:背包、線性DP、區間DP、環形DP等等
7、二分圖匹配:匈牙利算法
8、高精度
考試策略:
1.考試開始前,調界面,寫模板,寫頭文件,測試dev是否可用
2.看題目時注意數據范圍,時限,仔細,不要猜測出題目沒有說明的affairs
3.關於數據范圍..
20:O(2^n),搜索
100:O(n^3),Floyed/搜索
1000:O(n^2),動態規划/spfa/最小生成樹
500000:O(nlogn),二分答案/快排/線段樹/st表/樹鏈剖分/遍歷(DFS可能爆棧)
1000000:O(n)或O(1),數學問題/改變思維方向/貪心/kmp/dp
當然只是一般情況下...
4.long long一定注意在傳遞參數和快速冪中不要開漏了...
還有數論題目
“三年OI一場空,不開longlong見祖宗”
5.以及最近經常把頭文件寫錯(忘記寫iostream,忘記寫stdio.h之類的...)
6.寫代碼前想好,能夠證明最好證明,否則多出幾組特殊數據測試
7.想好需要的每一個函數再開始寫,並估算好時間空間復雜度
8.永遠不要嘗試不熟悉的算法orz...
9.一定要寫對拍...
10.千萬不要在最后15分鍾改代碼必錯無疑百發百中
11.絕對不要對答案被虐無疑
12.寫完一題檢查一題,不要趕時間去做T3,保證前兩題的正確性,T3除非是遇到了會寫的算法,不要思考超過15分鍾,直接寫騙分
13.寫完之后再留45min再檢查,數據測試,閱讀代碼,查看細節
14.查看文件名,有沒有把暴力程序交成正解
15.前兩題想不出來調不出來不要慌張,根據時間和難度判斷好是否繼續寫繼續調,或者先寫第三題,,決定之后不要猶豫,不要患得患失
16.避免day1認真day2水
17.檢查時,對於學過的知識再過一遍,看看有沒有漏掉簡單的算法或者小的優化
18.輸入換行符的處理
19.看清評測系統,按評測系統選擇用lld還是%I64d
20.DFS函數記得寫return
21.變量名如time屢錯不爽...
22.把memset,memcpy寫在for或者dfs里面忘記算復雜度....
23.cout,cin輸出不是必須(bignum)不要用,有TLE的風險
比賽常見問題總結
問題:
1、對於noip模擬:前兩題在會的情況下碼速不夠,直接斷送第三題的高分機會。
2、偶爾會有沒判0、爆棧等丟個5分10分的錯誤,偶爾會有
3、看到一道題好像會做,一激動就把時間全花在上面了。
4、臨近結束,一慌起來,連暴力都不會打。
5、由於時間復雜度估計錯誤而導致正解不敢打。
6、由於多余的變量查看、數據畫圖過多等多余步驟引起的時間浪費。
措施:
1、適當提高一點碼速,打代碼時保持清醒的頭腦,時刻明確自己正在干什么、自己要干什么。
2、選擇最恰當的方法來碼。那句話說得好:“每多一行代碼,就多一次把 i 打成 j 的機會。”方法以正確、簡潔為優,冗余代碼一定去除。
3、多方法調試。眼調、輸出調、拍、各種小數據測。時刻警醒拍真的不是萬能的。
4、控制好情緒,看題不激動,結束不慌張。深呼吸,念“南無地藏王菩薩”。
5、要有夢想。打目前想到的最優的方法,無論能否過(如果是暴力要順手加優化)。注意各個版本的程序的存檔。
6、出了bug先整體感知,不要一上來就斷點。