HDU 2222 目標串中模式串數量(AC自動機)

2021-07-04 03:24:12 字數 633 閱讀 2532

題意:給定n(n≤50)個模式串(每個模式串長度不超過50)和1個目標串(長度不超過1000000),問目標串中包含多少個模式串。

思路:用模式串建立dfa,然後用目標串掃一遍即可。使用陣列建立dfa,模板參考(陣列開500000乙隻tle,減小到250000才能ac(但是鏈結中的陣列開的就是500000呀。。。)

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

#define n 250010

char s[1000005];

queueq;

int t[n][26],fail[n],num[n];

int t,n,m,top,res;

void init()

void insert(char* s)

num[r] ++;

}void builddfa()}}

}void search(char* s)

}}int main(){

scanf("%d",&t);

while(t--){

int i;

init();

scanf("%d",&n);

for(i = 0;i

怎樣理解KMP演算法中模式串後移的目標位置?

到這裡大家對kmp應該有所了解,這裡就不對kmp的相關概念進行介紹了。kmp有個很基本的思想,就是當主串和模式串出現不匹配,需要進行下次匹配前,我們移動的是模式串,而非主串。例如 串 abdabc 和串 abc 注 計算機中模式串是不會移動的,所以這裡所說的 移動 也就是其下標 j 指向的變化 插播...

hdu 2087 剪花布條 求模式串在主串中的個數

problem description 一塊花布條,裡面有些圖案,另有一塊直接可用的小飾條,裡面也有一些圖案。對於給定的花布條和小飾條,計算一下能從花布條中盡可能剪出幾塊小飾條來呢?input 輸入中含有一些資料,分別是成對出現的花布條和小飾條,其布條都是用可見ascii字元表示的,可見的ascii...

KMP模式匹配中匹配的總子串數

類似題目 include include intnext 10001 int len1,len2,total char str 10001 buf 1000001 void get next else j next j 為何遞迴字首索引j next j 就能找到長度更短的相同字首字尾呢?這又歸根到 ...