bzoj2551 外星聯絡 字尾陣列

2021-07-13 13:17:51 字數 917 閱讀 8614

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

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

人發來的資訊。雖然他收聽到的僅僅是一些雜訊,但是他還是按照這些雜訊的高

低電平將接收到的訊號改寫為由 0 和 1 構成的串, 並堅信外星人的資訊就隱藏在

其中。他認為,外星人發來的資訊一定會在他接受到的 01 串中重複出現,所以

他希望找到他接受到的 01 串中所有重複出現次數大於 1 的子串。但是他收到的

訊號串實在是太長了,於是,他希望你能編乙個程式來幫助他。

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

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

輸出檔案的每一行包含乙個出現次數大於1 的子串所出現的次數。輸出的順

序按對應的子串的字典序排列。

7 1010101

3 3

2 2

4 3

3 2

2 對於 100%的資料,滿足 0 <=  n     <=3000 

題解:把字尾陣列求出來然後暴力即可.

**:#include#include#include#define n 30010

#define m 30010

using namespace std;

int t1[n],t2[n],sa[n],c[m],s[n],height[n],rank[n],n;

char ch[n];

bool cmp(int *y,int p,int q,int k)

void build_sa(int m)

}void getheight(){

int k=0;

for (int i=0;i=j&&k

bzoj 2251 外星聯絡

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

bzoj2251 外星聯絡

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

bzoj2749 外星人 數論

一開始還以為求方程 n x 1的解。後來看了半天沒有發現模數。原來下面還有樣例解釋。注意到解釋中有乙個 2 1,即為這道題目的突破口。乙個顯然的事實是,要消去pi這個質數,至少需要qi次。而求一次 x pi就會分解出乙個質因數2。而2分解以後就只剩下1了。而每次只能消去1個2,所以實際上是求能夠分解...