晚上不想寫代碼,就水一發博客吧qwq。
P2444 [POI2000]病毒
鏈接
無限長的字符串就是能在上無限跑下去而不會撞到已有的字符串,所以建出判環即可。
P3763 [TJOI2017]DNA
鏈接
建出之後,由於可以有錯誤匹配的機會,所以我們可以考慮。令表示匹配到這個節點時錯誤了次匹配是否可行,當然,寫個記憶化搜索就好了。
P3966 [TJOI2013]單詞
鏈接
板題……不過我還是一眼看成……
把所有字符串拼在一起,兩兩之間新增一個其它字符,然後把這個大字符串插到裏,最後把每個串往上跑就好了。由於每個串都存在,所以連樹都不用跳,好寫的一批。
P4051 [JSOI2007]字符加密
鏈接
定義
不過我很好奇,是年的論文,年他們是怎麼做的?
P4094 [HEOI2016/TJOI2016]字符串
鏈接
這個問題轉化還是比較妙的
首先可以明確,中所有子串有意義的其實只有以爲右端點的那些後綴,所以一種暴力的做法就是枚舉左端點再和算。對此,我們可以二分答案,顯然如果的話,任意小於的都是可以取到的(一起刪去末尾不就好了)。
接下來,我們就把原問題轉化成了一個判定性問題:判斷爲左端點,b爲右端點的子串與的子串是否有大於等於的。這樣的話,我們可以在中找到與的大於等於的所有串(暫且叫做),那麼接下來的問題就是詢問且的是否存在。把看做下標,看做權值,這就是主席樹板子了。
P5108 仰望半月的夜空
鏈接
考慮貪心,對於長度爲的子串,我們必然要在上找到第一個長度大於等於的子串,這個串的前位必然是長度爲的子串中字典序最小的。在這個基礎上,由於位置也要滿足最小,那麼就是與上述的這個串的大於等於的最小的。我們枚舉,由於單調遞增,那麼上述那個串的位置也必然是單調不降的,複雜度就有保證了。
P4036 [JSOI2008]火星人
鏈接
帶插入修改的……考慮除了可以,也可以用二分+哈希。對此,我們建一顆出來,每個點維護子樹內的值,對於詢問,二分之後在對應區間判斷是否相等就好了。
未完待續……