P1470 最长前缀 Longest Prefix
来源:互联网 发布:淘宝流量在哪里看手机 编辑:程序博客网 时间:2024/06/06 03:27
P1470 最长前缀 Longest Prefix代码
题目描述
在生物学中,一些生物的结构是用包含其要素的大写字母序列来表示的。生物学家对于把长的序列分解成较短的序列(即元素)很感兴趣。
如果一个集合 P 中的元素可以通过串联(元素可以重复使用,相当于 Pascal 中的 “+” 运算符)组成一个序列 S ,那么我们认为序列 S 可以分解为 P 中的元素。元素不一定要全部出现(如下例中BBC就没有出现)。举个例子,序列 ABABACABAAB 可以分解为下面集合中的元素:
{A, AB, BA, CA, BBC}
序列 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 <cstring> 2 #include <ctype.h> 3 #include <cstdio> 4 5 const int MAXN=200010; 6 const int MAXM=210; 7 8 int tot,Len; 9 10 char s[MAXM][12];11 12 char st[MAXN],pl[MAXN]; 13 14 int f[MAXN];15 16 bool b[MAXN];17 18 struct node {19 int next[27];20 };21 node t[MAXN];22 23 inline void build(int p) {24 int len=strlen(s[p]);25 int now=0;26 for(int i=0;i<len;++i) {27 int x=s[p][i]-'A'+1;28 if(!t[now].next[x]) t[now].next[x]=++tot;29 now=t[now].next[x];30 }31 b[now]=true;32 return;33 }34 35 inline void lo() {36 int len=strlen(pl);37 for(int i=0;i<len;++i) st[++Len]=pl[i];38 }39 40 int hh() {41 // freopen("prefix.in","r",stdin);42 // freopen("prefix.out","w",stdout);43 int i=1;44 while(scanf("%s",s[i])&&s[i][0]!='.')45 build(i);46 int ans;47 while(~scanf("%s",pl)) lo();48 f[0]=1;49 for(int i=0;i<=Len;++i) {50 if(f[i]!=true) continue;51 else ans=i;52 for(int now=0,j=i+1;j<=Len;++j) {53 int x=st[j]-'A'+1;54 now=t[now].next[x];55 if(!now) break;56 if(b[now]) f[j]=1;57 }58 }59 printf("%d\n",ans);60 return 0;61 } 62 63 int sb=hh();64 int main() {;}
阅读全文
0 0
- P1470 最长前缀 Longest Prefix
- 【DP】洛谷 P1470 最长前缀 Longest Prefix
- USACO 最长前缀 Longest Prefix
- USACO / Longest Prefix最长前缀(DP)
- USACO 2.3.1 Longest Prefix 最长前缀
- LeetCode Longest Common Prefix 最长前缀
- Longest Common Prefix 最长公共前缀
- 【最长公共前缀】Longest Common Prefix
- Longest Common Prefix -最长公共前缀
- 2.3.1 LONGEST PREFIX 最长前缀
- Longest Common Prefix(最长公共前缀)
- Leetcode:Longest Common Prefix 最长公共前缀
- LeetCode 14 Longest Common Prefix 最长前缀
- USACO:2.3.1 Longest Prefix 最长前缀
- Longest Common Prefix(最长公共前缀)
- (LeetCode)Longest Common Prefix --- 最长公共前缀
- usaco ★Longest Prefix 最长前缀
- Longest Common Prefix (最长公共前缀)
- 洛谷 P2253 好一个一中腰鼓 --线段树
- [HNOI2004] L语言 --trie树
- 第五周项目2-链栈算法库
- [NOI2000] 单词查找树
- 关于字符串的整理
- P1470 最长前缀 Longest Prefix
- HDU How far away ?--LCA
- P2922 [USACO08DEC]秘密消息Secret Message
- P2420 让我们异或吧
- 51Nod 1526 分配 笔名
- 图书管理系统full-stack总结
- [USACO09JAN]安全出行Safe Travel
- HDU Aragorn's Story -树链剖分
- [HAOI2015]树上操作 -树链剖分