bzoj2251 外星聯絡

2021-07-13 17:57:45 字數 838 閱讀 7643

description

小 p 在看過電影《超時空接觸》(contact)之後被深深的打動,決心致力於尋

找外星人的事業。於是,他每天晚上都爬在屋頂上試圖用自己的收音機收聽外星

人發來的資訊。雖然他收聽到的僅僅是一些雜訊,但是他還是按照這些雜訊的高 低電平將接收到的訊號改寫為由 0 和 1 構成的串,

並堅信外星人的資訊就隱藏在 其中。他認為,外星人發來的資訊一定會在他接受到的 01 串中重複出現,所以 他希望找到他接受到的 01

串中所有重複出現次數大於 1 的子串。但是他收到的 訊號串實在是太長了,於是,他希望你能編乙個程式來幫助他。 input

輸入檔案的第一行是乙個整數n ,代表小 p 接收到的訊號串的長度。 輸入檔案第二行包含乙個長度為n 的 01 串,代表小 p

接收到的訊號串。 output

輸出檔案的每一行包含乙個出現次數大於1 的子串所出現的次數。輸出的順 序按對應的子串的字典序排列。

因為字串的所有子串都可以看成字尾的字首,所以可以把所有字尾都插到一棵trie樹里,然後進行dfs,輸出字串數大於等於2的所有節點的字串數。由於字典樹的性質,dfs序就是字典序。

#include

#include

struct node

t[10000010];

int n,m;

char s[3010];

void dfs(int p)

if (t[p].c[1]&&t[t[p].c[1]].t>1)

}int main()

}dfs(0);

}

bzoj 2251 外星聯絡

題意 給出乙個字串,求出現次數超過1的子串的出現個數 字串長度 3000 題解 題目問的是子串的個數,那麼首先我們要找到所有的子串 而字串的所有字尾的字首可以不重不漏的表示所有子串 那麼如果將所有的字尾加入trie樹,每個經過的結點 也就是這個字尾的字首 計數 1 然後題目要求按字典序輸出,利用一下...

bzoj2551 外星聯絡 字尾陣列

小 p 在看過電影 超時空接觸 contact 之後被深深的打動,決心致力於尋 找外星人的事業。於是,他每天晚上都爬在屋頂上試圖用自己的收音機收聽外星 人發來的資訊。雖然他收聽到的僅僅是一些雜訊,但是他還是按照這些雜訊的高 低電平將接收到的訊號改寫為由 0 和 1 構成的串,並堅信外星人的資訊就隱藏...

BJWC2010 外星聯絡 字尾陣列

description 求乙個 01 串中所有重複出現次數大於 1 的子串所出現的次數,按照字典序排序輸出。solution 預處理出字尾陣列和高度陣列。對於每乙個字尾 i 如果 h i 1 h i 我們就去找到在這之後對任意 j in h i h i 1 第一次出現 h k 的 k 那麼 k i ...