hdu 2896 病毒侵襲 AC自動機

2021-06-19 08:33:44 字數 1184 閱讀 7610

hdu 2896

題目大意:

給出n個模式串,最後給出m個主串

問有主串出現過哪些模式串,最後輸出哪些主串能匹配模式串

解題思路:

ac自動機建立字典樹的用w值標記第幾個模式串

定義k值,匹配時若字典樹中的某個結點不等於k且w不為0則記錄該點

有多個主串需要匹配,所以不需要改變w的值,但可以判斷k的值

若該失敗指標的結點k值已經被匹配過則不需要再次匹配

**:

#include #include #include #include using namespace std;

#define max 10010

struct snodetree[max*6];

int index,listb[max*6],kk,ans[510];

char ch[max];

void insert(int star,int tlen,int k) //建立字典樹

else

s=tree[s].next[child];

}}void build_fail(int star) //建立失敗指標

now_fail=tree[now_fail].fail;

}if(tree[tree[tempv].next[i]].fail==-1) //找不到失敗指標,則指向根節點

tree[tree[tempv].next[i]].fail=0;

listb[s++]=tree[tempv].next[i];}}

}}int ac_auto(int k,int tlen) //bfs匹配

p=(tree[p].next[child]==-1)?0:tree[p].next[child]; //**

temp=p;

while(tree[temp].w!=-1&&temp!=0&&tree[temp].k!=k)

tree[temp].k=k;

temp=tree[temp].fail;}}

return sum;

}int main()

scanf("%d",&m);

getchar();

build_fail(0);

for(i=1,sumn=0;i<=m;i++)

return 0;

}

hdu 2896 病毒侵襲 ac自動機

include include include using namespace std define maxnode 100100 define sigma size 135 int ch maxnode sigma size int f maxnode fail函式 int val maxnode...

AC自動機 病毒侵襲 hdu2896

和hdu2222題相似的水題 1 連著re了好多發,沒想明白,看了一下網上題解才知道,輸入的不一定都是字母,所以next要開100!include include int tot char str 10005 int t int time 100 struct trie queue 100005 s...

hdu 2896 病毒侵襲 AC自動機

ac自動機模板題。匹配哪些病毒的特徵碼在當前模式串中出現過,並將這些出現過的特徵碼從小到大輸出。注意題目已說明不同編號特徵碼不相同。include include include include include include include include include include incl...