AC自動機妙用

2022-07-29 04:54:11 字數 1230 閱讀 7217

理解題意之後,很自然的想到了用ac自動機搞,結果網上一搜,全是暴搜,按照自己的思想,ac自動機搞起,果然在提交了數次之後,看到了accept。

ac自動機需要三個步驟:

第一步:建立字典樹;

第二步:為字典樹建立 fail 指標 ;

第三步:進行匹配;

#include#include#include#include#include#include#define max(x,y) ((x) > (y) ? (x) : (y))

using namespace std ;

struct node ;

node* new_node()

void build_tree( node *root , char *s )

root ->is_over = true ;

root ->len = len ;

}void build_fail(node *root)

while(r->fail->next[i] == null && r ->fail != root)

r = r->fail ;

if(r->fail ->next[i] != null)

p ->next[i]->fail = r ->fail ->next[i] ;

else

p ->next[i] ->fail = root ;

q.push(p->next[i]) ;

}} }

}int a_c(node *root , char *s)

else }

return count ;

}int main()

r->fail = null ;

root = r ;

build_fail(r) ;

char str[30][100] ;

char str1[30][100] ;

int count[30] = ;

int ma = 0 ;

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

cout << "excuse set #" << t++ << endl;

for(int k = 0 ; k < m ; k++)

if(count[k] == ma)

cout << str1[k] << endl ;

cout << endl ;

} return 0 ;

}

AC自動機妙用

理解題意之後,很自然的想到了用ac自動機搞,結果網上一搜,全是暴搜,按照自己的思想,ac自動機搞起,果然在提交了數次之後,看到了accept。ac自動機需要三個步驟 第一步 建立字典樹 第二步 為字典樹建立 fail 指標 第三步 進行匹配 include include include inclu...

AC自動機 建立nlogn個AC自動機

string set queries 題意 給你3種操作,1 加入乙個串到集合中。2 刪除集合中的某乙個串 3 查詢集合中的字串在給定的字串種出現幾次。同乙個串可重複 解法 建立多個ac自動機,用二進位制分組來處理。加入給你21個串 分為 16 4 1,再新增乙個串的時候,即21 1,22 16 4...

AC自動機及字尾自動機

ac自動機是一種基於trie樹的演算法,其本質和kmp上的處理很相似。trie樹結構 kmp轉移思路 ac自動機組要由三個部分組成 trie樹的建立 fail指標的匹配 對ac自動機的詢問 每次建立自動機會有一次初始化 ac自動機類 struct node node結構體 struct ac voi...