字符串 口胡

Frequency of String

對於多串匹配問題,考慮建出來AC自動機。
然後只要處理出來每個串在模式串中出現的位置就可以統計答案。
所以將\(S\)扔到AC自動機上暴力匹配,更新fail樹上祖先包含的串的出現位置集合。
由於保證了串兩兩不同,所以一個節點的祖先鏈上最多隻有\(O(sqrt(n))\)個串。

Xenia and String Problem

首先這道題有個性質是合法的字符串長度是固定的,只有log種。所以可以對每種長度的字符串計算貢獻。
考慮修改每個字符產生的貢獻,分成減少的和增加的。
首先用hash找到所有合法的字符串,然後在對應位置差分可以維護出修改每個位置時減少的貢獻。
對於增加的貢獻,枚舉所有位置和長度,判斷是否存在只修改一個字符使這個串合法的方案。
最後對每個點的貢獻取\(max\)即可。

Periodicity

文本校正

字符串

題目中的限制條件可以轉化爲\(lcp+lcs+k>=len\),於是可以考慮枚舉每個串的每個\(lcp\),統計合法的\(lcs\)個數。
考慮一個串可能被計算多次,那麼只要計算最長的lcs。
由於同時出現了lcs和lcp,所以可以考慮對正串和反串同時建出AC自動機,然後將S的正串和反串分別放在AC自動機上匹配。
那麼對於一個前綴節點a,S出現在這個位置的集合就是fail樹子樹中所有的出現位置。
所以只要找到這個前綴節點a對應的後綴節點,統計後綴節點b的fail樹子樹中所有位置與前綴節點位置對應的數的個數。
比較簡單的實現方法是差分,即在進入b子樹時統計一次答案,遍歷完子樹後再統計一次即可。

毒瘤題加強版再加強版

假裝這是個字符串題。
出現奇數次我們可以想到異或,所以我們需要考慮一種方法讓每種出現次數爲奇數的數都有一種與其他數不相關的異或和。
做法是:選取若干個質數,然後對於每個數,將其對每個質數取模後在對應的桶異或上這個這個數的hash值。
然後暴力掃一遍每個質數的每個桶,若能夠判斷這個桶只有一種數,那麼累加答案。

計算幾何瞎暴力

由於有全局異或這個東西,所以考慮建出trie樹。
對於有序的部分維護一個trie樹,無序的部分維護前綴和,那麼區間查詢操作就可以在trie上二分出對應的子樹,維護trie樹子樹內的權值和即可,無序部分直接查詢前綴和。
排序操作直接將無序部分暴力插入trie樹。
全局異或操作可以考慮在全局維護標記,或者直接給trie打標記。

節日慶典

Upside Down

封印

對T建SAM,處理出來S的每個前綴在T中的匹配長度,然後對於詢問二分答案,查詢一段區間最大值即可。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章