usaco ★Longest Prefix 最长前缀
生活随笔
收集整理的這篇文章主要介紹了
usaco ★Longest Prefix 最长前缀
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
★Longest Prefix 最長前綴
在生物學中,一些生物的結構是用包含其要素的大寫字母序列來表示的.生物學家對于把長的序列
28
分解成較短的(稱之為元素的)序列很感興趣.
如果一個集合 P 中的元素可以通過串聯(允許重復;串聯,相當于 Pascal 中的 “+” 運算符)
組成一個序列 S ,那么我們認為序列 S 可以分解為 P 中的元素.并不是所有的元素都必須出現.
舉個例子,序列 ABABACABAAB 可以分解為下面集合中的元素:
{A, AB, BA, CA, BBC}
序列 S 的前面 K 個字符稱作 S 中長度為 K 的前綴.設計一個程序,輸入一個元素集合以及一個
大寫字母序列,計算這個序列最長的前綴的長度.
PROGRAM NAME: prefix
INPUT FORMAT
輸入數據的開頭包括 1..200 個元素(長度為 1..10 )組成的集合,用連續的以空格分開的字符串
表示.字母全部是大寫,數據可能不止一行.元素集合結束的標志是一個只包含一個 “.” 的行.集
合中的元素沒有重復.接著是大寫字母序列 S ,長度為 1..200,000 ,用一行或者多行的字符串來表
示,每行不超過 76 個字符.換行符并不是序列 S 的一部分.
SAMPLE INPUT (file prefix.in)
A AB BA CA BBC
ABABACABAABC
OUTPUT FORMAT
只有一行,輸出一個整數,表示 S 能夠分解成 P 中元素的最長前綴的長度.
SAMPLE OUTPUT (file prefix.out)
在生物學中,一些生物的結構是用包含其要素的大寫字母序列來表示的.生物學家對于把長的序列
28
分解成較短的(稱之為元素的)序列很感興趣.
如果一個集合 P 中的元素可以通過串聯(允許重復;串聯,相當于 Pascal 中的 “+” 運算符)
組成一個序列 S ,那么我們認為序列 S 可以分解為 P 中的元素.并不是所有的元素都必須出現.
舉個例子,序列 ABABACABAAB 可以分解為下面集合中的元素:
{A, AB, BA, CA, BBC}
序列 S 的前面 K 個字符稱作 S 中長度為 K 的前綴.設計一個程序,輸入一個元素集合以及一個
大寫字母序列,計算這個序列最長的前綴的長度.
PROGRAM NAME: prefix
INPUT FORMAT
輸入數據的開頭包括 1..200 個元素(長度為 1..10 )組成的集合,用連續的以空格分開的字符串
表示.字母全部是大寫,數據可能不止一行.元素集合結束的標志是一個只包含一個 “.” 的行.集
合中的元素沒有重復.接著是大寫字母序列 S ,長度為 1..200,000 ,用一行或者多行的字符串來表
示,每行不超過 76 個字符.換行符并不是序列 S 的一部分.
SAMPLE INPUT (file prefix.in)
A AB BA CA BBC
ABABACABAABC
OUTPUT FORMAT
只有一行,輸出一個整數,表示 S 能夠分解成 P 中元素的最長前綴的長度.
SAMPLE OUTPUT (file prefix.out)
11
我最怕就是對這種字符串進行處理特別是換行之類的所以這題理所當然放到最后寫,。。。。。。然后不會寫看了題解。。。。。。。
按順序找到該點能延伸到最遠的那點并把那點標記為true,再每找到true的點就往后延伸,直到找不到了因為我們是按順序找true點的所以最后一個也就是最遠的一個。
/*
ID:jinbo wu
LANG:C++
TASK:prefix
*/
#include<bits/stdc++.h>
using namespace std;
char a[205][15];
string str;
char s[100];
bool f[200010];
int main()
{freopen("prefix.in","r",stdin);freopen("prefix.out","w",stdout);int num=0,ans;scanf("%s",a[num]);while(a[num][0]!='.'){num++;scanf("%s",a[num]); }str="";while(cin>>s)// cin>>s; str+=s;f[0]=true;for(int i=0;i<=str.length();i++){if(f[i]){ ans=i;for(int j=0;j<num;j++){int flag=1;for(int k=0;k<strlen(a[j]);k++)if(str[i+k]!=a[j][k]){flag=0;break;}if(flag)f[i+strlen(a[j])]=true;}}}cout<<ans<<endl;
}
總結
以上是生活随笔為你收集整理的usaco ★Longest Prefix 最长前缀的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 好听的女孩名字智
- 下一篇: usaco The Tamworth T