hdoj 2896 病毒侵襲(AC自動機)

2022-08-22 13:42:08 字數 1184 閱讀 7303

思路分析:題目為模式匹配問題,對於乙個給定的字串,判斷能匹配多少個模式;

該問題需要靜態建樹,另外需要對ac自動機的模板加以修改,

對於每個匹配的模式的最後乙個單詞的fail指標指向root,即可實現乙個

字串進行多次模式匹配;

**如下:

#include #include 

#include

#include

#include

using

namespace

std;

const

int kind = 128

;const

int max_node = 300 * 500

;const

int max_m = 10000 + 100

;char

str[max_m];

intvir_match[max_m];

struct

trie

intnewnode()

void insert(char *str, int

id)

end[now] =id;

}void

buildautomaton()

p =fail[p];

}if (p == -1

) fail[next[now][i]] =root;

}q.push(next[now][i]);}}

}}

int match(char *str)

++i;

}return

vir_count;

}};trie root;

intmain()

web_matched = 0

; match_count = 0

; root.buildautomaton();

scanf(

"%d\n

", &web_num);

for (int i = 0; i < web_num; ++i)

}printf(

"total: %d\n

", web_matched);

}return0;

}

hdu2896 AC自動機 病毒侵襲

同樣是一道很裸的ac自動機,統計哪些特徵碼出現在 的原始碼上,匹配成功時不要將val賦值為0,因為後面還有文字串要匹配,另外要注意編號需要從小到大輸出。include include includeusing namespace std const int maxn 100000 10 const ...

hdu 2896 病毒侵襲 AC自動機

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

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