總結與心得(持續更新)


不知道為什么,剛學的算法過了2個月就忘得一干二凈,我並沒有背代碼啊,當時學的時候還刷了好多題來着→_→,我是不是大腦能力嚴重衰退了。


動態規划

單調隊列

  一般情況下,${dp}$方程可以搞成這樣:${f_i=f_j+t_j+t_i}$,只要其中沒有變量同時與${i,j}$都有關,那么我們可以用單調隊列來做,單調隊列里面元素的關鍵字就是與${j}$有關的東西${f_j+t_j}$。example:生產產品

  有些比較特殊的,雖然存在同時與${i,j}$相關的函數,但是這個函數比較簡單,使得已經存在在單調隊列中元素的相對位置不會因此改變,這樣的話我們可以打一個全局標記來處理。example:瑰麗的華爾茲

  還有一些比較奇葩的,這已經不屬於單調隊列優化dp的范疇了。example:cut the sequence

斜率優化

  想當年我還寫過學習筆記,現在毛都不記得了T_T,斜率優化學習筆記。反正套路都差不多,不過我還是更喜歡從函數的角度去理解斜率優化。

  斜率單調。example:特別行動隊

  斜率不單調。example:購票

  橫坐標不單調。example:貨幣兌換

狀壓dp

  插頭。插頭還是挺簡單的,就是一個板子,隨着題目的變化稍微修改一下就好。example:Tony's Tour

  容斥套着,到了考場也不知道會不會做 ╮(╯_╰)╭。example:局部極小值

數位dp

  寫成記憶化搜索的形式會好很多,注意該開LL的時候開LL。example:Balanced Number


prufer

  prufer序列中每個數出現的次數就是它在樹中的度數-1。example:明明的煩惱

  經常用來做樹的計數一類dp。

樹分治

  點分治。關鍵是對答案的統計用什么算法和數據結構進行處理。example:Tree

  有的時候,一定要小心的就是掃把型的樹,如果不對子樹進行排序,很容易就會被卡掉。example:重建計划

  動態樹分治。沒什么好說的,也許我沒做過什么題。example:開店

  樹上CDQ。example:購票

樹鏈剖分  

  樹鏈剖分的性質(一個點到根節點的路徑上的輕變不超過$log$條)可能有些奇技淫巧。

  最簡單的維護樹上路徑修改查詢。example:軟件包管理器

  dsu on tree。其實就是樹鏈剖分維護啟發式合並,在某些情況下特別好寫= =。example:天天愛跑步

  長鏈剖分維護合並跟深度有關的信息。復雜度證明:每次合並的次數是這個節點連出的輕邊的點所在的重鏈的大小,那么每條重鏈最多只會被記錄一次,所以總合並次數是$O(n)$。聽說還能$O(n)$求lca。example:坑着

虛樹

  虛樹就是只含有查詢點以及它們lca的點的樹,往往與樹形dp一同食用。虛樹的題目往往其詢問點的總數不會超過某個值,必須要滿足在虛樹上dp可以降低復雜度。教程?

  example:世界樹

Link Cut Tree

  link的實質是找到父親,cut時換根是為了搞清楚兩點之間的父子關系。帶邊權的換成點。example:魔法森林

  LCT維護可加減子樹信息,如果不是可加減的就只能toptree了。注意在輕重邊替換的時候同時更新信息。example:共價大爺游長沙

  ntr的妙用= =。example:CC某題

  一類問題的通用解法,分類維護前綴信息和后綴信息。example:城市旅行


數據結構

KDtree

  能不寫最好還是不要寫吧,輕松被卡→_→,也許可以出奇制勝?如果要寫,重新構樹是個不錯的選擇。發現大數據跑不過,多半是剪枝掛了。

  平面上最近(最遠)點對。example:SJY擺棋子

  范圍內點權查詢,暴力重構。example:簡單題

  神應用,怒艹一類數據結構題。example:A simple rmq problem

Splay

  扣區間$[l,r]$的時候,把$l+1$Splay到根,$r+1$Splay到根的右兒子,然而加了“哨兵”,實際上是$l$和$r$。

  rotate和Splay記得要加取地址符。

  對區間操作完后記得pushup父親和根,pushup的時候size記得+1啊啊啊。

  example:維護數列

ST表

  好像沒什么好說的,一些細節想清楚就好了= =。example:超級鋼琴

treap

  比Splay好寫一些樹套樹方便一些可以持久化。思想還是蠻簡單的,隨機一個權值保證logn的期望樹高。

  非旋轉版現在還策不清,如果真的考了可持久化treap那我還是早早棄療吧=  =。example:普通平衡樹

分塊

  通常用來優化暴力。

  樹上分塊。example:王室聯邦

  權值分塊。example:dispatching

  優化暴力。example:最小公倍數

  數據有一些特色的,可以分兩類:$ > \sqrt{n}$和$ < \sqrt{n}$,分別處理與復雜度分析,然后基本不等式搞一搞取最優塊大小。好像沒有什么好的例子。。example:普通計算姬

可並堆

  好寫好調好理解,代碼簡短。example:disoatching

鏈表

  雙向鏈表大法好。example:營業額統計

啟發式合並

  把size小的往size大的里面丟,合並次數$logn$。example:森林

  貌似寫過的啟發式合並都是直接set了=。=

樹套樹

  二維線段樹。example:魔幻棋盤

  線段樹套treap。example:二逼平衡樹

樹狀數組

  區間修改。example:poj某題

線段樹

  呵呵,線段樹上各種耍雜技=  =。

  維護連通性。example:堵塞的交通

  掃描線結合。example:Picture

  二維線段樹。單點修改矩形查詢,example:魔幻棋盤;矩形修改單點查詢;可以直接標記可持久化,example:樹狀數組

  蜜汁思路。example:基礎數據結構練習題

  線段樹合並。example:CF 666E

  超哥線段樹。example:robot

  區間取最值操作。example:hdu某題

  歷史最值查詢。example:CPU監控

  還有個勁(j)爆(b)玩意兒現在都還不懂。example:CF某題

主席樹

  ntr的妙用=  =。example:CC某題

  優化網絡流連邊。example:a+b problem

  可持久化數組。example:可持久化並查集

  樹狀數組套主席樹。其實是樹狀數組套權值線段樹=  =。


數學

BSGS

  用來求解$a^x=b~(mod~p)$,所謂大步小步。可能出現無解的情況。example:板子題

多項式乘法

  注意數組大小,以及最后除一個$n$。循環卷積注意細節變動。轉成整型的時候不要爆了int。板子一套:多項式乘法

  求解字符串匹配問題。example:萬徑人蹤滅

  預處理$ω$加強精度,任意模數FFT,倍增優化dp。所謂倍增優化,就是$f_i$可以由$f_x$和$f_y$推過來($x+y=i$)。example:CF某題

  離散對數NTT,循環卷積,求解原根,倍增優化dp。

  所謂循環卷積,就是在DFT回來統計答案的時候,除了加上對應位置$x$上的卷積結果,還要再加上$x+m-1$位置上的卷積結果。example:序列統計

博弈論

  當前局面的SG等於后繼狀態的SG的$mex$,當前游戲的SG等於各個子游戲的SG狀態的$xor$。大都是腦洞題,考場上只能看人品了。。

  求解SG函數。example:江南樂

  暴力求解SG,找規律。example:S-NIM

高斯消元

  模意義高斯消元,其實就是除的時候乘個逆元。example:SETI

  線性基相關。example:XOR

  線性基性質。線性基中每一個可以被異或出來的元素的異或方案數相同(包括0)。example:albus就是要第一個出場

  動態構造線性基。example:元素

數學相關dp和組合計數

  多推推式子轉化一下問題,從不可做變成可做。組合數公式的話大概用格點法推一推?$\displaystyle \binum{n}{m}$表示從$(0,0)$走到$(n-m,m)$的方案。

  dp期望或者dp概率通過概率算期望。example:亞瑟王

  精度要求不高的,可以估算一下計算的次數。example:CF坦克大戰

  異或相關dp的正確AC姿勢,雖然沒有什么普適性。example:Lights

  二進制相關dp的正確AC姿勢。一般先考慮排列方案最后再除個階乘會好很多。轉移的時候考慮到相等的情況,需要容斥一發。example:facer's chocolate dream

莫比烏斯反演

  $mu[i]$,如果i的某個質因子指數大於$1$,$mu[i]=0$;否則,$mu[i]=(-1)^{i的質因子個數}$

  推式子的時候一定要小心,把一些東西提前的時候不要忘記乘或者除了個什么東西。

  $\lfloor n/i \rfloor$,取值相同的$i$的范圍為$[i,n/(\lfloor n/i \rfloor)]$。

  用來容斥,很棒棒哦。example:完全平方數

  約數個數有一個比較經典的式子。example:約數個數和

  線性篩約數和。離線處理約束條件。example:數表

歐拉函數

  在線求歐拉函數。example:Longge的問題

  一個公式。example:Robot

  當$n>2$,$φ(n)$是偶數。example:上帝與集合的正確使用方法

置換

  Burnside:對於一個置換$f$,若存在一個着色方案$s$經過置換后不變,稱$s$為$f$的不動點,等價類數目為所有置換的不動點的平均值。example:Cards

  Polya:假設可以有$k$種顏色,那么一個置換$f$的循環內的元素的顏色必須相同,等價類的數目為所有置換的$k^{循環個數}$的平均值。example:Let it bead

  一個是對染色方案考慮,另一個是直接對置換考慮。

數論大合集

  費馬小定理優化矩陣乘法。example:矩陣游戲

  Lucas,費馬小定理,中國剩余定理。example:古代豬文

  Lucas用的時候要注意特判$m=0$,同時組合數記得特判$n<m$。模數不是質數的Lucas,就用古代豬文中的方法,分解質因數然后CRT合並。

  exgcd和CRT最好還是用LL運算,不然怎么掛的都不知道=。=

  暴力容斥。example:跳蚤


 

字符串

AC自動機

  沒啥好說的。。。板子題:阿狸的打字機

HASH

  也沒啥好說的。。板子題:火星人

KMP

  還是沒啥好說的。。可能會有奇技淫巧吧。板子題:動物園

manacher

  我已經不記得了。板子題:不知名

trie

  異或貪心相關。example:poj某題

  trie樹合並,跟線段樹合並差不多。example:Alice和Bob又在玩游戲

后綴數組

  基本的論文二分答案+按照height分組的思想。example:milk patterns

  單調棧。example:CS

  后綴自動機求后綴樹組。example:板子題

  雙向鏈表。example:生成魔咒

  分割點。example:mrs

后綴自動機

  


思想

CDQ分治

  看起來很強但是很simple的一個玩意兒。

  CDQ圖分治。example:城市建設

  CDQ上樹+維護斜率優化dp。example:購票(這題出現頻率真高=  =)

  一道還不錯的題。example:共點圓

  四維偏序。example:偏序

倍增

  沒啥好說的,注意邊界細節。

  神題一道。example:會議中心

  倍增優化dp,類似快速冪。example:序列統計

莫隊算法

  莫隊還是挺靈活的,各種升級版本都有=  =。

  樹上莫隊。example:糖果公園

  在線莫隊。其實就是預處理出來n個詢問,然后每次讀入的詢問暴力移左右端點。example:坑

  江隊。只有插入或者刪除的莫隊。example:坑

  總之在考場上應該也能YY出來吧,一定要注意常數啊,一個小小的細節可能就葬送AC=。=

平面圖與對偶圖

  優化網絡流。example:海拔

  摳域和點定位。example:平面圖(話說看這毒瘤題真的大丈夫?=  =)

整體二分

  沒啥好說的。example:接水果


小技巧

  差分求解區間gcd。example:魔幻棋盤

  當答案是這種$ans=a/b$的形式,二分答案是個不錯的選擇。example:最小圈

  二分$delta$。example:tree

  兩個熏肉貪心題。哈夫曼;example:荷馬史詩。田忌賽馬;example:泡泡堂BNB

  圖的hash(話說這真的叫hash嗎,反正王隊長這么說那我就跟風了=。=)。example:DZY loves Chinese

  弦圖。話說這玩意兒真的會考嗎。example:神奇的國度

  $O(1)$黑科技double快速乘。如果沒記住還是龜速乘吧,寫錯一點都會GG。example:隨機數生成器


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM