bzoj1212 L语言 trie

来源:互联网 发布:mac 浅色文件夹打不开 编辑:程序博客网 时间:2024/05/29 06:49

这题本来是想用AC自动机做的,结果发现好水啊,直接上那个trie都能过,,就是每一个单词去匹配那个文章。。。跑的还更快。。

#include<cstdio>#include<cmath>#include<cstring>#include<iostream>#include<algorithm>#define fo(i,a,b) for(int i=a;i<=b;i++)#define fd(i,a,b) for(int i=a;i>=b;i--)using namespace std;typedef long long ll;const int N=1300005;const int mo=1e9+7;int a[305][30],cnt=0,val[N],len,ans,f[N],n,m;char s[N];inline void ins(){    int x=0,len=strlen(s);    fo(i,0,len-1)    {        int c=s[i]-'a';        if (a[x][c])x=a[x][c];        else x=a[x][c]=++cnt;    }    val[x]=1;}inline void updata(int x){    int c=s[x]-'a';    int now=a[0][c];    for(;now;now=a[now][s[++x]-'a'])    {        if (val[now])f[x]=1;        if (x==len)return;    }}int main(){    scanf("%d%d",&n,&m);    fo(i,1,n)    {        scanf("%s",s);        ins();    }    fo(i,1,m)    {        scanf("%s",s+1);        int t=0,ans;        len=strlen(s+1);        memset(f,0,sizeof(f));        f[0]=1;        fo(j,0,len)        {            if (t>10)break;            if (!f[j])            {                t++;                continue;            }            t=0,ans=j;            updata(j+1);        }        printf("%d\n",ans);    }}
0 0
原创粉丝点击