hdu2222 Keywords Search

來源:互聯網
上載者:User

AC自動機模板題

#include<iostream>#include<cstring>#include<cstdio>using namespace std;struct node{node *fail;node *next[26];int count;}*q[500001];char keyword[51];char str[1000001];int head,tail;void insert(char str[],node *root){node *p=root;int i=0,cur;while(str[i]){cur=str[i]-'a';if(p->next[cur]==NULL)p->next[cur]=new node();p=p->next[cur];i++;}p->count++;}void build(node *root){int i;root->fail=NULL;q[head++]=root;while(head!=tail){node *temp=q[tail++];node *p=NULL;for(i=0;i<26;i++){if(temp->next[i]!=NULL){if(temp==root)temp->next[i]->fail=root;else{p=temp->fail;while(p!=NULL){if(p->next[i]!=NULL){temp->next[i]->fail=p->next[i];break;}p=p->fail;}if(p==NULL)temp->next[i]->fail=root;}q[head++]=temp->next[i];}}}}int query(node *root){int i=0,cnt=0,cur;node *p=root;while(str[i]){cur=str[i]-'a';while(p->next[cur]==NULL&&p!=root)p=p->fail;p=p->next[cur];p=(p==NULL)?root:p;node *temp=p;while(temp!=root&&temp->count!=-1){cnt+=temp->count;temp->count=-1;temp=temp->fail;}i++;}return cnt;}int main(){int t,n;scanf("%d",&t);while(t--){head=tail=0;node *root=new node();scanf("%d",&n);while(n--){scanf("%s",keyword);insert(keyword,root);}build(root);scanf("%s",str);printf("%d\n",query(root));}return 0;}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.