理解題意之後,很自然的想到了用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...