1.詢問在文字串中各個詢問串各出現了幾次
hdu3065
#include
#include
#include
#include
#include
#include
#include
#define liangjiajun main
using
namespace
std;
int t;
int n,sz,ch[500004][34],p[500004],cnt[500004];
char s[1004][54],m[2000004];
int ans[1004];
queue
q;int ins(char *s,int num)
}cnt[now]=num;
return0;}
int build()
}return0;}
int solve(char *pro)
int to=pro[i]-'a';
while(!ch[now][to])now=p[now];
now=ch[now][to];
for(int j=now;j;j=p[j])
}return0;}
int w33ha()
memset(ans,0,sizeof(ans));
sz=1;
for(int i=0;i<26;i++)ch[0][i]=1;
for(int i=1;i<=n;i++)
scanf("%s",m+1);
build();
solve(m);
for(int i=1;i<=n;i++)
}return0;}
int liangjiajun()
2.詢問在文字串中有幾個詢問串出現過
hdu2222
#include
#include
#include
#include
#include
#include
#include
#define liangjiajun main
using
namespace
std;
int n,sz,ans,ch[1000004][34],p[1000004],cnt[1000004];
char s[54],m[1000004];
bool mark[1000004];
queue
q;int ins(char *s)
}cnt[now]++;
return0;}
int build()
}return0;}
int solve(char *pro)}}
return ret;
}int w33ha()
scanf("%d",&n);
sz=1;ans=0;
for(int i=0;i<26;i++)ch[0][i]=1;
for(int i=1;i<=n;i++)
scanf("%s",m+1);
build();
printf("%d\n",solve(m));
return0;}
int liangjiajun()
3.詢問在文字串中,各個詢問串出現了幾次,如果不算公共區間的話,各個詢問串出現了幾次
zoj3228
#include
#include
#include
#include
#include
#include
#include
#include
#define liangjiajun main
using
namespace
std;
int t;
int n,sz,ch[600004][27],p[600004],cnt[600004];
char m[100004];
vector
vec[100004];
struct aska[100004];
inline
bool dex(ask a,ask b)
}return1;}
int ans[100004][4],ret[100004];
queue
q;int ins(char *s,int num)
}cnt[now]=num;
return0;}
int build()
}return0;}
int solve(char *pro)
}for(int i=1;i<=n;i++)
}vec[i].clear();}}
return0;}
int w33ha(int case)
memset(ans,0,sizeof(ans));
memset(ret,0,sizeof(ret));
sz=1;
for(int i=0;i<26;i++)ch[0][i]=1;
scanf("%d",&n);
for(int i=1;i<=n;i++)
sort(a+1,a+n+1,dex);
ins(a[1].s,1);
for(int i=2;i<=n;i++)
build();
solve(m);
for(int i=2;i<=n;i++)
}for(int i=1;i<=n;i++)
printf("case %d\n",case);
for(int i=1;i<=n;i++)
puts("");
return0;}
int liangjiajun()
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...
AC自動機演算法
ac自動機簡介 首先簡要介紹一下ac自動機 aho corasickautomation,該演算法在1975年產生於貝爾實驗室,是著名的多模匹配演算法之一。乙個常見的例子就是給出n個單詞,再給出一段包含m個字元的文章,讓你找出有多少個單詞在文章裡出現過。要搞懂ac自動機,先得有字典樹trie和kmp...