hdu 2896 病毒侵襲 ac自動機

2021-06-21 20:25:53 字數 890 閱讀 4476

#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]; // 每個字串的結尾結點都有乙個非0的val

int last[maxnode]; // 輸出鍊錶的下乙個結點

bool vis[510];

int sz;

char viru[210],web[11000];

int flag;

void init()

// 插入字串。v必須非0

void insert(char *s, int v)

u = ch[u][c];

}val[u] = v;

} // 遞迴列印以結點j結尾的所有字串

void print(int j)

} // 在t中找模板

void find(char* t)

} // 計算fail函式

void getfail()

}// 按bfs順序計算fail

while(!q.empty())

}}int main()

getfail();

scanf("%d",&m);

int sum=0;

for(i=1;i<=m;i++)

}printf("total: %d\n",sum);

}return 0;

}

hdu 2896 病毒侵襲 AC自動機

hdu 2896 題目大意 給出n個模式串,最後給出m個主串 問有主串出現過哪些模式串,最後輸出哪些主串能匹配模式串 解題思路 ac自動機建立字典樹的用w值標記第幾個模式串 定義k值,匹配時若字典樹中的某個結點不等於k且w不為0則記錄該點 有多個主串需要匹配,所以不需要改變w的值,但可以判斷k的值 ...

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