Trick 不完全整理

HRcohc發表於2024-11-29

讀題讀題再讀題,觀察觀察再觀察,手模手模再手模

別怕麻煩,遺漏關鍵性質會悔恨終生

退一步有時能夠更好的進一步

雜項

  • 一定按著某一標準劃分階段/部分來討論,不要怕麻煩否則更容易走彎路

  • 只要求部分“格式相同”的資訊都可以用例如雜湊/離散化的技巧將資訊一般化後統一處理

  • 注意是“分層”,“分步”還是幾個情況並起來

  • 括號序列經典套路:異或雜湊,單調棧

  • 字首和/差分能夠把區間資訊轉成單點資訊,有時用來降維處理

  • 氣泡排序輪數為 \(\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\)

  • 歷史版本線段樹的意義在於累計同一位置的貢獻

  • 按值域插入可以認為是在解決偏序,也可以認為是模擬連結串列

  • 序列無非考慮長度、值域離散程度、隨機等方面,然後才是特殊的題面給出的性質,不要忘了考慮最基本的東西

  • 某些特別的處理順序下會讓資訊變得無需刪除或可以透過刪除抵消(指尤拉序,按深度等)

  • 凸包就是一堆直線的集合,不一定需要李超樹,可以直接分塊 + 斜率維護

  • 樹狀陣列是把單點修改的影響字首和到區間上,不是區間到區間

相關文章