P1470 最長字首 Longest Prefix

2021-08-09 08:46:10 字數 1425 閱讀 9812

p1470 最長字首 longest prefix在生物學中,一些生物的結構是用包含其要素的大寫字母序列來表示的。生物學家對於把長的序列分解成較短的序列(即元素)很感興趣。

如果乙個集合 p 中的元素可以通過串聯(元素可以重複使用,相當於 pascal 中的 「+」 運算子)組成乙個序列 s ,那麼我們認為序列 s 可以分解為 p 中的元素。元素不一定要全部出現(如下例中bbc就沒有出現)。舉個例子,序列 ababacabaab 可以分解為下面集合中的元素:

序列 s 的前面 k 個字元稱作 s 中長度為 k 的字首。設計乙個程式,輸入乙個元素集合以及乙個大寫字母序列 s ,設s'是序列s的最長字首,使其可以分解為給出的集合p中的元素,求s'的長度k。

輸入格式:

輸入資料的開頭包括 1..200 個元素(長度為 1..10 )組成的集合,用連續的以空格分開的字串表示。字母全部是大寫,資料可能不止一行。元素集合結束的標誌是乙個只包含乙個 「.」 的行。集合中的元素沒有重複。接著是大寫字母序列 s ,長度為 1..200,000 ,用一行或者多行的字串來表示,每行不超過 76 個字元。換行符並不是序列 s 的一部分。

輸出格式:

只有一行,輸出乙個整數,表示 s 符合條件的字首的最大長度。

輸入樣例#1:

a ab ba ca bbc

.ababacabaabc

輸出樣例#1:

11
翻譯來自nocow

usaco 2.3

和  [hnoi2004]l語言  一樣

1 #include 2 #include 3 #include 4

5const

int maxn=200010;6

const

int maxm=210;7

8int

tot,len;910

char s[maxm][12

];11

12char

st[maxn],pl[maxn];

1314

intf[maxn];

1516

bool

b[maxn];

1718

struct

node ;

21node t[maxn];

2223 inline void build(int

p) 31 b[now]=true;32

return;33

}3435 inline void

lo()

3940

inthh() 58}

59 printf("

%d\n

",ans);

60return0;

61}

6263

int sb=hh();

64int main()

**

P1470 最長字首 Longest Prefix

在生物學中,一些生物的結構是用包含其要素的大寫字母序列來表示的。生物學家對於把長的序列分解成較短的序列 即元素 很感興趣。如果乙個集合 p 中的元素可以通過串聯 元素可以重複使用,相當於 pascal 中的 運算子 組成乙個序列 s 那麼我們認為序列 s 可以分解為 p 中的元素。元素不一定要全部出...

最長公共字首

描述 給k個字串,求出他們的最長公共字首 lcp 樣例 在 abcd abef 和 acef 中,lcp 為 a 在 abcdefg abcefg abcefa 中,lcp 為 abc 新知識點 vectorstrs既可以是一維的,也可以是多維的。在這裡講解三維的初始化。vector str str...

最長公共字首

編寫乙個函式來查詢字串陣列中的最長公共字首。如果不存在公共字首,返回空字串 示例 1 輸入 flower flow flight 輸出 fl 示例 2 輸入 dog racecar car 輸出 解釋 輸入不存在公共字首。說明 所有輸入只包含小寫字母a z。class solution object...