IOI96 最長字首

2021-08-03 11:20:12 字數 1211 閱讀 8782

時間限制 : 15000 ms 空間限制 : 65536 kb

問題描述

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

如果乙個集合 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 符合條件的字首的最大長度。

樣例輸入

a ab ba ca bbc 

. ababacabaabc

樣例輸出

#include#include#include#includeusing namespace std;

string a[201];

string str;

bool f[200001];

int n,len;

bool ischar(char c)

bool check(int p)

} return false;

}int main()

int x1,x2;

str="";

len=0;

while(cin>>s)

memset(f,0,sizeof(f));

f[0]=true;

for(int i=1;i<=len;i++)

if(check(i))

f[i]=true;

else

f[i]=false;

for(int i=len;i>=0;i--)

if(f[i]){

cout<

IOI 96 Magic Square解題報告

ioi 96 magic square 魔版 題目由jerryxie翻譯。magic square msqaure.cpp c pas 問題描述 在魔方的成功之後,盧比克先生發明了它的二維版本,叫做魔版。它是乙個由八個方塊組成的 在本題中我們認為每乙個方塊都有不同的顏色,這些顏色將會用1 8共8個整...

最長公共字首

描述 給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...