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...