日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

HDU2896 病毒侵袭

發布時間:2025/7/14 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 HDU2896 病毒侵袭 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目傳送門

AC自動機第一題~

一看就是一個非常簡單的多串匹配問題了,輸出方案?記錄一下就好了

注意這里code是Trie圖,它是AC自動機的改進版本,有效利用了原本無用的邊,這反而簡化了代碼

#include<queue> #include<stdio.h> #include<string.h> #include<algorithm> #define N 100010 using namespace std; char s[N]; int fail[N],son[N][128],c[N],cnt=1,n,T=0; inline void insert(char* s,int pos){int x=1;for(;*s;++s)x=son[x][*s]?son[x][*s]:son[x][*s]=++cnt;c[x]=pos; } inline void build(){queue<int> q;for(int i=0;i<128;++i)if(!son[1][i]) son[1][i]=1;else q.push(son[1][i]),fail[son[1][i]]=1;for(int x;!q.empty();q.pop()){x=q.front();for(int i=0;i<128;++i)if(!son[x][i]) son[x][i]=son[fail[x]][i];else q.push(son[x][i]),fail[son[x][i]]=son[fail[x]][i];} } inline bool query(char* s){bool vis[510]={0},v=0;for(int x=1;*s;++s){x=son[x][*s];for(int j=x;j!=1;j=fail[j])if(c[j]) vis[c[j]]=v=1;}if(!v) return 0;printf("web %d:",T);for(int i=1;i<=n;++i) if(vis[i]) printf(" %d",i);puts(""); return 1; } int __18520(){if(scanf("%d",&n)<0) return 0; for(int i=1;i<=n;++i){scanf("%s",s); insert(s,i);}build(); int ans=0,m; scanf("%d",&m); for(T=1;T<=m;++T){scanf("%s",s); ans+=query(s);}printf("total: %d\n",ans); return cnt=1; } int main(){ while(__18520()); }

轉載于:https://www.cnblogs.com/Extended-Ash/p/9477189.html

總結

以上是生活随笔為你收集整理的HDU2896 病毒侵袭的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。