题目:
我是超链接
题解:
挺暴力的AC自动机......
f[i]表示从 0 - i 可以涵盖单词
代码:
#include <cstdio> #include <cstring> #include <iostream> #include <algorithm> using namespace std; int m,n,ch[205][30],tot=0,f[1000001]; char st[1000001]; bool is_end[1000001]; void cl() { scanf("%s",st); int l=strlen(st); int now=0; for (int i=0;i<l;i++) { int x=st[i]-'a'; if (!ch[now][x]) ch[now][x]=++tot; now=ch[now][x]; } is_end[now]=true; } void ac(int m,int v) { int ans=0; f[0]=v; for (int i=0;i<=m;i++) { if (f[i]!=v) continue; int now=0; for (int j=i+1;j<=m;j++) { int x=st[j]-'a'; if (!ch[now][x]) break; now=ch[now][x]; if (is_end[now]) ans=max(ans,j),f[j]=v; } } printf("%d\n",ans); } int main() { int i; scanf("%d%d",&n,&m); for (i=1;i<=n;i++) cl(); for (i=1;i<=m;i++) { scanf("%s",st+1); ac(strlen(st+1),i); } }