题意:

求每个模式串在母串中出现的次数

#include <map>
#include <set>
#include <list>
#include <cmath>
#include <queue>
#include <stack>
#include <cstdio>
#include <vector>
#include <string>
#include <cctype>
#include <complex>
#include <cassert>
#include <utility>
#include <cstring>
#include <cstdlib>
#include <iostream>
#include <algorithm>
using namespace std;
typedef pair<int,int> PII;
typedef long long ll;
#define lson l,m,rt<<1
#define pi acos(-1.0)
#define rson m+1,r,rt<<11
#define All 1,N,1
#define read freopen("in.txt", "r", stdin)
#define N 250001
const ll INFll = 0x3f3f3f3f3f3f3f3fLL;
const int INF= 0x7ffffff;
const int mod = ;
char p[][],q[];
int n,used[N],mer[N];
struct Trie{
int ch[N][],val[N],f[N],num;
void init(){
num=;
memset(ch,,sizeof(ch));
memset(val,,sizeof(val));
memset(f,,sizeof(f));
}
int build(char *s){
int u=,len=strlen(s);
for(int i=;i<len;++i)
{
int v=s[i]-'a';
if(!ch[u][v]){
memset(ch[num],,sizeof(ch[num]));
ch[u][v]=num++;
}
u=ch[u][v];
}
val[u]++;
return u;
}
void getfail(){
queue<int>q;
for(int i=;i<;++i)
if(ch[][i])
q.push(ch[][i]);
while(!q.empty()){
int r=q.front();
q.pop();
for(int i=;i<;++i)
{
int u=ch[r][i];
if(!u){ch[r][i] = ch[f[r]][i];continue;}
q.push(u);
int v=f[r];
while(v&&!ch[v][i])v=f[v];
f[u]=ch[v][i];
}
}
}
void find(char *T){
set<int>se;
int u=,len=strlen(T);
for(int i=;i<len;++i){
int v=T[i]-'a';
while(u&&ch[u][v]==)
u=f[u];
u=ch[u][v];
int tmp=u;
while(tmp){
if(se.find(tmp)==se.end()){
se.insert(tmp);
mer[tmp]++;
}
tmp=f[tmp];
}
}
}
}ac;
int main()
{
int n,m,hao[];
ac.init();
scanf("%d",&m);
for(int i=;i<=m;++i)
{
scanf("%s",p[i]);
}
scanf("%d",&n);
for(int i=;i<=n;++i){
scanf("%s",q);
hao[i]=ac.build(q);
}
ac.getfail();
memset(mer,,sizeof(mer));
for(int i=;i<=m;++i){
ac.find(p[i]);
}
for(int i=;i<=n;++i)
printf("%d\n",mer[hao[i]]);
return ;
}

最新文章

  1. 给 Android 研发的一些的建议
  2. 负载均衡session会话保持方法
  3. Climbing Stairs - Print Path
  4. iOS警告-Warning: Error creating LLDB target at path(模拟器警告)
  5. linux C(undefined reference to `sqrt&#39;)
  6. 设置android:supportsRtl=&amp;quot;true&amp;quot;无效问题
  7. #ifndef 和 #endif
  8. R语言-时间序列
  9. java模拟链表
  10. iStack堆叠介绍
  11. 使用sudo而无需输入密码的设置
  12. javascript 正则表达式(十)
  13. python scrapy baidu image【转】
  14. 【Java】 剑指offer(7) 二叉树的下一个结点
  15. 使用 scp命令免登陆
  16. GPU 显存释放
  17. Spark使用总结与分享【转】
  18. php实现循环链表
  19. XML相关转换
  20. EF常用查询语句

热门文章

  1. 表单验证插件——validate
  2. 近期概况&amp;总结
  3. lintcode :Integer to Roman 整数转罗马数字
  4. 被忽略却很有用的html标签
  5. ArcGIS 10.1 for Desktop新特性之地理标记照片
  6. mongodb 常见操作转
  7. $.toJSON的用法或把数组转换成json类型
  8. Oracle 多实例如何通过EM进行访问-portlist.ini
  9. 【转】android 自定义控件
  10. Java 解析 XML