AC自动机 HDOJ 5384 Danganronpa
/*
题意:多个文本串,多个模式串在每个文本串出现的次数
AC自动机:这就是一道模板题,杭电有道类似的题目
*/
/************************************************
* Author :Running_Time
* Created Time :2015-8-14 14:14:32
* File Name :AC.cpp
************************************************/ #include <cstdio>
#include <algorithm>
#include <iostream>
#include <sstream>
#include <cstring>
#include <cmath>
#include <string>
#include <vector>
#include <queue>
#include <deque>
#include <stack>
#include <list>
#include <map>
#include <set>
#include <bitset>
#include <cstdlib>
#include <ctime>
using namespace std; #define lson l, mid, rt << 1
#define rson mid + 1, r, rt << 1 | 1
typedef long long ll;
const int MAXN = 1e5 + ;
const int MAXNODE = 6e5 + ;
const int INF = 0x3f3f3f3f;
const int SIGMA_SIZE = ;
const int MOD = 1e9 + ;
ll res;
struct AC {
int ch[MAXNODE][SIGMA_SIZE], f[MAXNODE], sz;
ll val[MAXNODE];
void init(void) {
memset (ch[], , sizeof (ch[]));
sz = ; val[] = ;
}
int idx(char c) {
return c - 'a';
}
void insert(string s) {
int u = ; int len = s.size ();
for (int i=; i<len; ++i) {
int c = idx (s[i]);
if (!ch[u][c]) {
memset (ch[sz], , sizeof (ch[sz]));
val[sz] = ;
ch[u][c] = sz++;
}
u = ch[u][c];
}
val[u]++;
}
void build(void) {
queue<int> Q; f[] = ;
for (int i=; i<SIGMA_SIZE; ++i) {
int u = ch[][i];
if (u) {
f[u] = ; Q.push (u);
}
}
while (!Q.empty ()) {
int r = Q.front (); Q.pop ();
for (int i=; i<SIGMA_SIZE; ++i) {
int u = ch[r][i];
if (!u) {
ch[r][i] = ch[f[r]][i]; continue;
}
Q.push (u);
f[u] = ch[f[r]][i];
val[u] += val[f[u]];
}
}
}
ll query(string s) {
int len = s.size ();
ll ret = ; int j = ;
for (int i=; i<len; ++i) {
int c = idx (s[i]);
j = ch[j][c];
ret += val[j];
}
return ret;
}
}ac;
string t[MAXN], p; int main(void) { //HDOJ 5384 Danganronpa
int T; scanf ("%d", &T);
while (T--) {
int n, m; scanf ("%d%d", &n, &m);
ac.init ();
for (int i=; i<=n; ++i) cin >> t[i];
for (int i=; i<=m; ++i) {
cin >> p; ac.insert (p);
}
ac.build ();
for (int i=; i<=n; ++i) {
printf ("%I64d\n", ac.query (t[i]));
}
} return ;
}
AC自动机 HDOJ 5384 Danganronpa的更多相关文章
- HDOJ 5384 Danganronpa AC自己主动机
AC自己主动机裸题 Danganronpa Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java ...
- AC自动机 HDOJ 2222 Keywords Search
题目链接 题意:每个文本串的出现次数 分析:入门题,注意重复的关键字算不同的关键字,还有之前加过的清零. 新模板,加上last跑快一倍 #include <bits/stdc++.h> ...
- Hdu 5384 Danganronpa (AC自动机模板)
题目链接: Hdu 5384 Danganronpa 题目描述: 给出n个目标串Ai,m个模式串Bj,问每个目标串中m个模式串出现的次数总和为多少? 解题思路: 与Hdu 2222 Keywords ...
- HDU 5384——Danganronpa——————【AC自动机】
Danganronpa Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)Tot ...
- 【HDOJ 5384】Danganronpa
[HDOJ 5384]Danganronpa AC自己主动机. .. 当时感觉用字典树 标神也往自己主动机想来着..手太生加上时间紧迫也没敲--回来一看题解什么AB同一时候建自己主动机...顿时愣了 ...
- HDU 5384 AC自动机
链接:http://acm.hdu.edu.cn/showproblem.php?pid=5384 题意:给n个母串,给m个匹配串,求每个母串依次和匹配串匹配,能得到的数目和. 分析:之前并不知道AC ...
- HDU 5384 字典树、AC自动机
题目:http://acm.hdu.edu.cn/showproblem.php?pid=5384 用字典树.AC自动机两种做法都可以做 #include<stdio.h> #includ ...
- AC自动机+DP HDOJ 2457 DNA repair(DNA修复)
题目链接 题意: 给n串有疾病的DNA序列,现有一串DNA序列,问最少修改几个DNA,能使新的DNA序列不含有疾病的DNA序列. 思路: 构建AC自动机,设定end结点,dp[i][j]表示长度i的前 ...
- hdoj 3065 病毒侵袭持续中(AC自动机)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=3065 思路分析:问题需要模式匹配多个模式串,需要注意的是模式串会包含和重叠,需要对AC自动机的匹配过 ...
随机推荐
- HTML5 <template>标签元素简介
一.HTML5 template元素初面 <template>元素,基本上可以确定是2013年才出现的.干嘛用的呢,顾名思意,就是用来声明是“模板元素”. 目前,我们在HTML中嵌入模板H ...
- cocos2d-x进化为2.5D的一些想法
首先我得说Unity3D已经做的非常好了,搞这些东西意义真心不大.详细Unity3D有什么优势我之前也写过两篇文章来阐述自己的想法. 假设我的下一份工作是U3D的话,预计我就不会 ...
- EA生成实体类代码
引言 在做机房个人版重构的时候,就听说了EA是一个强大的软件.仅仅只是知道的时候,已经画完了图,没有怎么用EA其它的功能,所以一直没有见识过罢了.如今到了机房合作了,想到EA一定要好好用,这样能省不少 ...
- 我的Android进阶之旅------>Android编译错误java.util.zip.ZipException: duplicate entry的解决方法
今天在Android Studio中把另外一个项目引入当前项目,编译的时候出现了java.util.zip.ZipException: duplicate entry错误. 错误例如以下所看到的: F ...
- 【bzoj2753】[SCOI2012]滑雪与时间胶囊
#include<algorithm> #include<iostream> #include<cstdlib> #include<cstring> # ...
- 总结文件操作函数(二)-C语言
格式化读写: #include <stdio.h> int printf(const char *format, ...); //相当于fprintf( ...
- SAP更改日志记录表
CDHDR 更改日志表头 CDPOS 更改日志行项目 SAP中修改频率较低的定制表(T001等)一般都会有修改记录存在,查看一个表有没有修改记录可以在SE11中查看他的技术设置,如果其中的LOG ...
- HDU4738 Caocao's Bridges —— 边双联通分量 + 重边
题目链接:https://vjudge.net/problem/HDU-4738 A network administrator manages a large network. The networ ...
- 如何制作.a静态库?合成多架构静态库?
08_01静态库 08_02制作静态库 .a 1.新建项目com+shift+n:选择Framework&Library. 2.下一步. 项目名不能为中文. 3.编写代码之后.用真机运行.会自 ...
- 四:网络--NSURLConnection基本使用
一.NSURLConnection的常用类 (1)NSURL:请求地址 (2)NSURLRequest:封装一个请求,保存发给服务器的全部数据,包括一个NSURL对象,请求方法.请求头.请求体.... ...