開考首先看下封面上各題的空間時間,開不開O2,有沒有特殊說明 用不了多少時間但頗有必要。c++
以後過遍題面,估計下難度、思考方向,決定開題順序數組
優先級:網絡
1.裸題數據結構
2.簡單題測試
3.以後大概按題目順序大數據
對於一道題:有高分普適暴力先打(特殊高分也可打),打的時候看可否優化,正解10min無思路跳下一題,有思路就實現,而後開拍進下一題。優化
如此三道題差很少能在比較短的時間內拿到保底分並且留有餘地。spa
而後再按思考深度進題,實在沒思路且沒時間,打特殊部分分,對於不能處理的大數據範圍,隨機化 亂搞。.net
紅字可以避免押寶、心態爆炸。想不出正解,我有暴力分。想的出,我立刻就能夠打拍,即便先打正解,我也照樣要打暴力對拍。如此穩賺不虧。c++11
ps:前段時間押寶虧大了長記性。
10.5受挫我又來補充了。。。
不要被同桌帶節奏,心態穩住,按照本身的節奏,遵守上面所說的。
記得測試極限數據,防止RE TLE,同時size測一下,防止MLE
若是有操做只會更優,最好打上
最後十分鐘檢查:
1.freopen fclose
2.數組大小
3.long long
4.輸出格式(換行、空格、SPJ格式、保留小數)
5.是否交對程序
6.c++11
比較像是dp的題:
首先考慮dp,看能不能設出合法狀態,列轉移方程,若是複雜度能拿到必定的部分分就先打。打完記得觀察式子,看能不能優化(前綴和,數據結構...)
若是dp狀態數太多或者很是很差列狀態,考慮貪心,如要反悔考慮堆和網絡流。
最優化問題可試一下能不能套最短路
有時候結合個網格圖會寫成拓撲排序,其實本質就是dp,然而拓撲不能優化。
複雜度太高,dp相似用n+m個權值不一樣且n和m分別有數量限制的物品填揹包還有特殊限制(有x個在mst,同一物品在不一樣回合權值不一樣),考慮wqs二分。 這個太抽象,胡了
狀壓dp要考慮轉移複雜度
圖論:
純圖論->結合考點(拓撲排序,連通份量...雙連通,割點,割邊性質...)
基環樹拆環成樹 dp
機率指望:
機率正推,指望逆推
有後效性,先列高斯消元,複雜度炸看能不能推出轉移係數(單層轉移,每一個狀態只由一個變量轉移,只在兩側成環)。
《記憶的輪廓》《樹》這種樹上瞎走題,歸無序到有序,求出一個點向上向下走移動一步的指望,而後倍增處理全部移動。
機率轉移要包含全部可能的狀況《山屋驚魂》、《Cicada 與排序》
數論:
提出gcd,轉化互質,斷定範圍,求出變元個數,注意重複。例子《神炎皇》模擬6七、《木板》模擬70
[1,n]有n/i個數能被i整除
判線段徹底覆蓋:
小值域差分數組
大值域線段以左端點sort,貪心取max,看是否存在一個時刻max<l-1
求最大的區間和點的匹配(區間包含點,且只能兩兩匹配)
暴力:跑匈牙利最大匹配$nm$,dinic彷佛是$m \sqrt{n}$?
貪心:sort點,掃的過程當中加入(set、堆)越過左端點的區間,在合法中貪心匹配右端點最左的。
最小點覆蓋
非樹下是NP徹底問題
樹,設dp[u][0/1]爲u選或不選,而後轉移便可
約瑟夫問題:
n我的,每次m步,求最後贏家
倒推式子,結論 for i 2->n ans=(ans+m)%i
ans=ans+1
當m很小,n很大的時候能夠優化(跳過等差數列)。
無環圖中,點數-邊數=連通塊數
線段樹:
1.區間加減 max min 異或
區間異或+查和,每一個節點維護位桶(區間內該位爲1的值的個數)
2.最大連續x區間及位置
3.以時間爲下標維護操做,支持logn更改某個操做並獲得更改後最後的結果
4.區間操做,查詢一個點上擁有的操做。
作法:把區間操做拍在序列線段樹上,到L<=l&&r<=R就加到這個節點上,單點查的時候累計全部路徑區間答案。
一樣可視爲分治樹。
5.優化建圖:對於區間加邊的題。
spe權值線段樹:
1.前驅後繼、rank、kth。見模擬68
主席樹(可持久化權值線段樹):
區間某答案
樹上按深度建主席樹,支持快速查詢某個子樹d深度答案
支持樹鏈上建主席樹+lca合併信息。
區間前驅後繼、rank、kth。
---摘自「Freopen」的原創文章
樹狀數組能幹的事:
1:快速簡潔求解前綴最值
2:快速簡潔求解前綴和,單點修改區間和,區間修改單點值。
3:並不簡潔的求解區間修改區間求和(但也比線段樹簡潔)
4:快速維護樹上每一個點到根的路徑權值和
5:快速維護樹上每一個點的子樹和(與4不兼容)
6:用來輕鬆愉快的套主席樹,Splay等各種動態數據結構
7:維護帶刪除\插入操做的排名,不過須要二分,兩個log不推薦,推薦線段樹一個log
並查集:
維護相等關係
按秩合併:把大的接到小的後邊,撤銷操做見模擬58的Dash Speed
1.對於和必定的一個集合,集合中不一樣的數的個數不超過$\sqrt{n}$
提示點:
圖上n==m 基環樹
i和[1,i-1]有關係 樹型
最小值最大,最大值最小 二分
複雜度:
n=
10 $n!$ 狀壓
20 $2^n$
30~40 $2^{\frac{n}{2}}$ Meet In The Middle
100 $n^3$ 、 $n^3logm$(矩陣快速冪,m=1e18)
1000~5000 $n^2$ 、 $n^2logn$
1e5 $nlogn$ 、 $nlog^2n$ $n\sqrt{n}$(極限,估計要開2s)
1e12 1e14 $\sqrt{n}$
數值:
5e7 1s穩過
1e8 小常數1s可過
常見處理:
1.區間加減、異或最後查詢 差分數組|||在線修改查詢 樹狀數組
2.維護帶絕對值的最值 拆,維護四個
3.求字典序第k小 26進制下的k-1
4.平均值相關 減去平均值,以後前綴和等操做,通常要二分平均值
5.異或相關 按位維護
6.數組下標與值的含義互換 常見於大費用小權值揹包dp
7.什麼先於什麼,求最優 拓撲+貪心(堆實現)
注意字典序最小!=小的數優先最靠前
前者直接小根堆跑拓撲,後者大根堆求字典序最大再反過來(原理?有時間再細想一想)。
見小限制輸入,可打表。
分塊打表:把答案分塊,對大塊打表,使不足一塊的部分的複雜度合法。同時也保證了表不會很大。
哈密爾頓迴路
最小點覆蓋
DAG求拓撲數
yeshi錯誤:
快速冪注意邊界,注意乘爆,先取模。
n*(n-1)說明有重邊
能用鄰接表不用鄰接矩陣
別交錯程序
最後,不要頹廢。