【hdu2896】病毒侵袭

我的内心几乎是崩溃!!
AC自动机模板题
一开始给每个叶子开了26个儿子,后来RE了,发现没有规定必须是小写字母,然后改成130,突然觉得这道题卡内存啊,写完之后果真MLE了,看了别人的博客发现跟我开同样大的数组大小没有事,猛然想到去掉memset这样的话只会有100000个结点,所以不会MLE。
此时大概已经这道题已经写了40分钟左右了,然后我就开始崩溃了,自测各种数据不出错,交上去不停WA,于是搜到了zyf2000的博客,照着她的程序改,= =本来我AC自动机的模板就是找着她打的而且码风和她很像(大括号换行嘿嘿,zyz是不换行的异端),直到改到和她变量名不同,其他完全相同的时候,还是在WA,我想难道有不规范的关键字,然后又交了一遍,忽然想到是不是输出的单词的问题,整个人都懵逼了,赶快检查自己的程序,web没有问题啊,total!!!!我简直想抽自己一巴掌,于是这道题写了整整两个小时,整个人都不好了,蓝瘦,日了假狗(捂脸)。
贴上改到和zyf2000基本完全相同的代码。

#include
#include
#include
#include
#include

using namespace std;
const int N=100005;
int ch[N][130],n,m,sz,fl[N],ed[N],cnt,ans[N];
bool vis[N];
char s[N];
queue<int>q;

void insert(int id)
{
    int len=strlen(s),now=0;
    for (int i=0;iint x=s[i];
        if (!ch[now][x])ch[now][x]=++sz;
        now=ch[now][x];
    }
    ed[now]=id;
}
void make_fail()
{
    while(!q.empty()) q.pop();
    for (int i=0;i<=128;++i)
    if (ch[0][i])q.push(ch[0][i]);
    while(!q.empty())
    {
        int now=q.front();q.pop();
        for (int i=0;i<=128;++i)
        {
            if (!ch[now][i])
            {
                ch[now][i]=ch[fl[now]][i];
                continue;
            }
            fl[ch[now][i]]=ch[fl[now]][i];
            q.push(ch[now][i]);
        }
    }
}
void ac()
{
    int len=strlen(s),now=0;
    for (int i=0;i1;
        int x=s[i]; 
        int y=ch[now][x];
        while (y&&!vis[y])
        {
            vis[y]=1;
            if (ed[y])ans[++ans[0]]=ed[y];
            y=fl[y];
        }
        now=ch[now][x];
    }
}
int main()
{
    scanf("%d\n",&n);
    for (int i=1;i<=n;++i)
    {
        gets(s);
        insert(i);
    }
    scanf("%d\n",&m);
    make_fail();
    for (int j=1;j<=m;++j)
    {
        gets(s);
        ans[0]=0;
        memset(vis,0,sizeof(vis));
        ac();   
        if (ans[0])
        {
            printf("web %d: ",j);
            sort(ans+1,ans+ans[0]+1);
            for (int i=1;i<=ans[0];++i)
            printf("%d%c",ans[i]," \n"[i==ans[0]]);
            ++cnt;
        }
    }
    printf("total: %d\n",cnt);
}

你可能感兴趣的:(字符串,AC自动机)