讀題讀題再讀題,觀察觀察再觀察,手模手模再手模
別怕麻煩,遺漏關鍵性質會悔恨終生
退一步有時能夠更好的進一步
雜項
-
一定按著某一標準劃分階段/部分來討論,不要怕麻煩否則更容易走彎路
-
只要求部分“格式相同”的資訊都可以用例如雜湊/離散化的技巧將資訊一般化後統一處理
-
注意是“分層”,“分步”還是幾個情況並起來
-
括號序列經典套路:異或雜湊,單調棧
-
字首和/差分能夠把區間資訊轉成單點資訊,有時用來降維處理
-
氣泡排序輪數為 \(\max \sum \limits_{j = 1}^{i - 1} a_{j} > a_{i}\),或者轉成排列後為 \(\max{(i - p_{i})}\)
-
直接取高次冪相加可以使得雜湊能被修改,不過容易衝突
貪心
-
反悔貪心一般考慮刪除操作帶來的貢獻即可
-
考慮形如 \(a + b, a \times b\) 的排序而不是先 \(a\) 後 \(b\),不過真是貪心可以推柿子得到
-
調整法是個好東西
\(Dp\)
-
據說貪心(不行就) \(\rightarrow\) \(Dp\)(不行就) \(\rightarrow\) (有些時候)網路流
-
考慮改變 \(Dp\) 順序/換維/換根時是否更簡單,有後效性則嘗試建反圖,正難則反
-
另外在合理條件下分配一個貢獻的插入順序可以讓原本不能 \(Dp\) 的東西可以 \(Dp\)
-
看範圍認型別,尤其記住狀壓是很明顯的,不然就是折半搜尋、
-
博弈論也可以 \(Dp\),清楚必勝態/必敗態即可,效果等價於 \(SG\) 函式
-
拆一個序列時考慮是否可以對其中一個/些集合貪心選擇來讓另一部分能儘可能範圍更大
-
考慮資訊能夠擴充套件或合併的形式,多畫轉移矩陣
-
樹上有後效性考慮換根處理
計數
-
狀態與操作方案的對映很關鍵,基本上直接決定做法
-
容斥不一定要列舉完子集(\(O(n^{3})\)),也可以從每一層往前減完(\(O(n^{2})\)),或者只需要減去上一段的貢獻
-
資訊集合形成的“向量”一般提示偏序做法,考慮限制能否轉成一些直線
-
從最終形態入手處理(加邊 \(\rightarrow\) 刪邊),從較簡單情況入手處理
-
貢獻思想,轉換物件,一個集合可以透過考慮其成員來對映(點不好處理就考慮邊)
-
構造題,計數題一定要特殊考慮邊界,時間複雜度一般允許暴力處理
最佳化
-
過而不及
-
構造矩陣時考慮將兩代式子做差
-
\(pre\) 與 \(suf\) 有時是個好東西,統計/去重一定記得考慮
-
可重複貢獻/可傳遞考慮倍增最佳化
-
錯解不優,有時別想太多
-
可以二分的時候就可以考慮能否雙指標掃了
-
平衡複雜度(根號分治,不同資料範圍跑正確性不不一的做法),調一調引數就過了
-
決策單調性不是一定用在 \(Dp\),也可以直接分治(類似整體二分)
樹
-
基環樹有美好的提示性作用,一般環上資訊考慮斷環為鏈或者建生成樹再考慮非樹邊,不同的生成樹要考慮的非樹邊種類不同
-
重心,直徑端點等和“距離”,“子樹大小”的題經常相關
-
考慮對邊的兩側來討論進行證明,可以簡化不必要的資訊
圖及建模
-
支配對連邊是個不錯的選擇,但要考慮是否全是偏序資訊
-
最短路不確定當前抵達時刻時欽定當前為 \(0\) 分別往起點/終點跑
-
有特殊數量關係/偏序關係的邊權可以嘗試先貪心一部分來最佳化
-
“同色點”可以考慮建虛點或者直接連成環
-
分層圖分開的是階段
-
“地圖”題目,不是轉成序列或圖論近似,就是構造或人類智慧
-
偏序的一些隱藏資訊可以透過畫示意圖只管得到
數學與概期
-
老老實實先按題意列式子,組合意義化簡,不要一來就想透過抽象意義或性質寫簡單柿子
-
打表出奇蹟,該水的就不要證明(搜尋也行)
-
向量點積、叉積出奇效(算面積)
-
\(lowbit\),\(highbit\) 都是 \(log\) 級別的約數
-
取模下的答案可能需要 \(crt\) 合併每個簡單情況的資訊
-
拉插在能夠證明遞推式的次數上界時可以直接化簡掉遞推
-
廣義的矩陣(\((min/max, +)\))也符合結合律而不滿足交換律,可以考慮維護樹上/序列資訊
-
機率可以考慮拆方案數,期望一般需要管“數量”
-
高維字首和與容斥互為反演
-
中位數,平均數,方差仍然有它們的意義
-
帶平方的柿子可能只有某些項與答案強相關
-
座標變化可以轉化成數學變化
-
容斥去掉一個邊界利於化簡柿子
資料結構
-
並查集 + \(+n\) 表示另一情況 = 擴充套件域並查集, + 到根的距離 \(\% p\) 刻畫資訊 = 帶權並查集, + 按秩合併 = 可撤銷並查集
-
掃描線是個好東西,離線一定可以去掉一維限制
-
考慮對於“種類”欽定,然後只有在/不在集合內的分組狀態
-
位運算相關大多按位考慮,畢竟複雜度基本上會帶 \(log\),否則考慮 \(Trie\) 樹上的合併過程找性質
-
點集較小時最少的能構成奇環的邊數時可以線段樹 + 並查集維護
-
序列資訊不可合併時只能考慮離線之類的處理,實在不行只能隨機化混分(指莫隊,分塊等)
-
\(DDp\) 的本質是利用矩陣簡化 \(pushup\) 的過程
-
“區間線段覆蓋”可以刻畫多種資訊(可行性,存在性,\(min/max \dots\))
-
歷史版本線段樹的意義在於累計同一位置的貢獻
-
按值域插入可以認為是在解決偏序,也可以認為是模擬連結串列
-
序列無非考慮長度、值域、離散程度、隨機等方面,然後才是特殊的題面給出的性質,不要忘了考慮最基本的東西
-
某些特別的處理順序下會讓資訊變得無需刪除或可以透過刪除抵消(指尤拉序,按深度等)
-
凸包就是一堆直線的集合,不一定需要李超樹,可以直接分塊 + 斜率維護
-
樹狀陣列是把單點修改的影響字首和到區間上,不是區間到區間