洛谷P3808 模板 AC自動機(簡單版)

2021-09-25 11:42:53 字數 1231 閱讀 2143

給定n個模式串和1個文字串,求有多少個模式串在文字串裡出現過。

subtask1[50pts]:∑length(模式串)<=106

10^6

106,length(文字串)<=106

10^6

106,n=1;

subtask2[50pts]:∑length(模式串)<=106

10^6

106,length(文字串)<=106

10^6

106;

#include

#include

#include

#include

using

namespace std;

//用∑length(模式串)作為maxn

const

int maxn=

1000005

;int n;

char s[maxn]

;char ss[maxn]

;class

ac_automatic

//首先建立trie樹

inline

void

insert

(char

*s)//作為模式串結尾的標記,同時記錄模式串出現次數

val[u]++;

}void

build()

}//bfs找出所有節點的fail指標

while

(!qu.

empty()

)else

//如果這個點不存在,就直接跳到前乙個點的fail指標的下乙個點上

ch[u]

[i]=ch[fail[u]

][i];}

}}intask

(char

*s)}

return ans;

}private

:int size;

int ch[maxn][26

];int val[maxn]

;int fail[maxn]

; queue<

int> qu;

}ac;

intmain()

ac.build()

;scanf

("%s"

,ss)

;printf

("%d\n"

,ac.

ask(ss));

return0;

}

AC自動機入門,洛谷P3808

給定n個模式串和1個文字串,求有多少個模式串在文字串裡出現過。輸入輸出格式 輸入格式 第一行乙個n,表示模式串個數 下面n行每行乙個模式串 下面一行乙個文字串。輸出格式 乙個數表示答案 輸入輸出樣例 輸入樣例 1 2aaa aa輸出樣例 1 兩個會出現在模板題面裡的詞語 文字串和模式串 給你幾個單詞...

洛谷P3808 模板 AC自動機(簡單版)

這是一道簡單的ac自動機模板題。用於檢測正確性以及演算法常數。為了防止卡oj,在保證正確的基礎上只有兩組資料,請不要惡意提交。給定n個模式串和1個文字串,求有多少個模式串在文字串裡出現過。輸入格式 第一行乙個n,表示模式串個數 下面n行每行乙個模式串 下面一行乙個文字串。輸出格式 乙個數表示答案 輸...

洛谷P3808 模板 AC自動機(簡單版)

給定n個模式串和1個文字串,求有多少個模式串在文字串裡出現過。輸入格式 第一行乙個n,表示模式串個數 下面n行每行乙個模式串 下面一行乙個文字串。輸出格式 乙個數表示答案 include using namespace std int const n 1000005 int const m 1000...