今天沒有考試,全天講題。今天的內容是字串。首先講的是hash。hash就是通過一些運算(hash = s[i] * base ^ i之類的)讓每乙個串所對應的hash值不同。之後看了bzoj上的乙個系列的題,hash killer。這些題可以告訴我們要卡hash其實不是很難(雖然hash killer iii 至今沒人過,包括出題人)。然後講的就是kmp和ac自動機。這兩個東西之前林先生講過,這裡也就不再多說。不過bzoj上那道挺簡單的最長回文(其實是一道manacher,但是如果常數寫得好看的話可以hash水)調了很久也沒有完全調出來(邊界資料會出問題),這暴露了自己**能力不足。下午講了manacher,它可以求最長回文。它有一點dp的意思在裡面。通過加一些虛擬的字元使原字串的長度變為乙個奇數,記錄p[i]表示i能向兩邊推(包括i)的最大距離,如果能求出p,則答案就是max(p)-1了(以i為中點的最長回文為2*p[i]-1,但這是加過字元後的答案,把加進去的字元乾掉,最長回文就是p[i]-1)。我們假設p[1~i-1]已經求好了,現在要求p[i]:
假設當前能達到的最右邊為r,對應的中點為pos,j是i的對稱點。
當i<r時,
由於l~r是回文,所以p[i]=p[j](i的最長回文和j的最長回文相同),所以
,p[i]=min(p[2*pos-i],r-i) (r - i是沒有全包含)。
當i>=r時,
由於後面是未知的,於是只能暴力處理了,不過可以證明這樣並不會造成複雜度的退化(因為r最多右移len次)。
2017暑假七林集訓day7 花翻
早上學長講課。首先講的是位運算。位運算是乙個奧妙重重的東西,比任何邏輯運算子都快上許多倍,可以用做常數優化的利器。它有許多神奇的應用,比如可以把列舉子集寫的這樣飄逸 for int x n x x x 1 n 另外呢他還有類似 builtin popcount 這種奧妙重重的底層函式。接下來講的是搜...
2017國慶鄭州集訓Day2
搜尋演算法是利用計算機的高效能來有目的的窮舉乙個問題解空間的部分或所有的可能情況,從而求出問題的解的一種方法。現階段一般有列舉演算法 深度優先搜尋 廣度優先搜尋 a 演算法 回溯演算法 蒙特卡洛樹搜尋 雜湊函式等演算法。在大規模實驗環境中,通常通過在搜尋前,根據條件降低搜尋規模 根據問題的約束條件進...
2019 7 7海亮暑假集訓Day2考試總結
2,這是一道高階差分的模板題 我都不知道什麼是高階差分 首先,我們要知道如下定理。1 把差分字首和就會等於原序列 2 c n,k c n 1,k 1 c n 1,k 3 c n,m c n 1,m 1 這些東西很好證明,所以就不說了 接下來我們說一下怎麼做。py個圖,不打了,那個大括號就表示n 下面...