菜不成声 的 ac自动机 刷题记录
2024-10-08 09:28:14
HDU2222 Keywords Search
- 模板题。数组开小了结果会T。。。
- 代码
#include <bits/stdc++.h>
#define nmax 10010 using namespace std;
char in[nmax],b[];
int t[*nmax][];
int f[*nmax],v[nmax*];
int n,cnt=,ans=; void ins(){
int idx=,l=strlen(in);
for (int i=; i<l; i++) {
int x=in[i]-'a';
if(!t[idx][x]) t[idx][x]=++cnt;
idx=t[idx][x];
}
v[idx]++;
} void init(){
for (int i=; i<=cnt; i++) {
for (int j=; j<; j++) t[i][j]=;
f[i]=v[i]=;
}
cnt=;
ans=;
} void bf(){
queue <int> q;
for (int i=; i<; i++) if(t[][i]) q.push(t[][i]);
while(!q.empty()){
int u=q.front();
q.pop();
for (int i=; i<; i++) {
if( t[u][i] ) {
f[t[u][i]]=t[f[u]][i];
q.push(t[u][i]);
}else t[u][i]=t[f[u]][i];
}
}
} void solve(){
int p=,l=strlen(b);
for (int i=; i<l; i++) {
int x=b[i]-'a';
p=t[p][x];
for (int j=p; j&&~v[j]; j=f[j]) ans+=v[j],v[j]=-;
}
} int main(){
int cas;
cin>>cas;
while(cas--){
init();
scanf("%d",&n);
for (int i=; i<n; i++) { scanf("%s",in); ins(); }
bf();
scanf("%s",b);
solve();
printf("%d\n",ans);
}
return ;
}o(* ̄▽ ̄*)ブ
HDU2896 病毒侵袭
最新文章
- jQuery LigerUI V1.2.2 (包括API和全部源码) 发布
- 简单jquery实现select三级联动
- 第27章 结构型模式大PK
- SSL、OPENSSL、SSH、OPENSSH
- 结合Apache和Tomcat实现集群和负载均衡 JK 方式
- Null modem接线
- 【第二课】深入理解Handler
- poj3667【线段树】/【类似权值线段树写法】
- poj2762 强连通+拓扑序
- 感谢大家的支持,发布一个JWFD的补丁文件
- C语言第四节数据类型、常量、变量
- java编程中容易犯2的细节汇总
- Sqlite学习笔记(四)&;&;SQLite-WAL原理(转)
- 项目管理实践 -- 健身小管家(Fitness housekeeper)的管理(2)
- JSON反序列化实体类
- process想停就停,真爽
- fedora20 安装搜狗输入法及各种问题的解决
- day20<;IO流>;
- JAVA解析XML文件(DOM,SAX,JDOM,DOM4j附代码实现)
- JS响应数据