hdu 3065 AC自动机
// hdu 3065 AC自动机
//
// 题目大意:
//
// 给你n个短串,然后给你一个长串,问:各个短串在长串中,出现了多少次
//
// 解题思路:
//
// AC自动机,插入,构建,查询就OK啦
//
// 感悟:
//
// 这道题真的是1A的哟~~~很开心~~~尽管是个裸地,继续加油哟~~~FIGHTING #include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>
#include <queue>
using namespace std; const int MAX_NODE = ;
const int SIGMA = ; struct Aho_Corasick{ int ch[MAX_NODE][SIGMA];
int f[MAX_NODE];
int val[MAX_NODE];
int last[MAX_NODE];
int cnt[];
int sz; void init(){
sz = ;
memset(ch[],,sizeof(ch[]));
memset(cnt,,sizeof(cnt));
val[] = ;
} void insert(char *s, int v){
int u = ;
int n = strlen(s);
for (int i=;i<n;i++){
int c = s[i];
if (!ch[u][c]){
memset(ch[sz],,sizeof(ch[sz]));
val[sz] = ;
ch[u][c] = sz++;
}
u = ch[u][c];
}
val[u] = v;
} void getfail(){
queue<int> que;
for (int c = ;c < SIGMA; c++){
int u = ch[][c];
if(u){
que.push(u);
f[u] = ;
last[u] = ;
}
} while(!que.empty()){
int r = que.front();
que.pop(); for (int c = ; c < SIGMA;c++){
int u = ch[r][c]; if (!u)
continue; que.push(u); int v = f[r]; while( v && !ch[v][c])
v = f[v]; f[u] = ch[v][c]; last[u] = val[f[u]] ? f[u] : last[f[u]];
}
}
} void get_cnt(int u){
if (u){
cnt[val[u]]++;
get_cnt(last[u]);
}
} void query(char *s){
int u = ; int n = strlen(s); for(int i=;i<n;i++){
int c = s[i]; while(u && !ch[u][c])
u = f[u]; u = ch[u][c]; if (val[u]){
get_cnt(u);
}else if (last[u]){
get_cnt(last[u]);
}
}
} }ac; int n; char p[][]; char str[]; void input(){
ac.init();
char s[];
for (int i=;i<=n;i++){
scanf("%s",s);
memcpy(p[i],s,sizeof(s));
ac.insert(s,i);
}
ac.getfail(); scanf("%s",str); ac.query(str);
for (int i = ;i<=n;i++){
if (ac.cnt[i]){
printf("%s: %d\n",p[i],ac.cnt[i]);
}
}
} int main(){
//freopen("1.txt","r",stdin);
while(scanf("%d",&n)!=EOF){
input();
}
return ;
}
hdu 3065 AC自动机的更多相关文章
- hdu 3065 AC自动机(各子串出现的次数)
病毒侵袭持续中 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Sub ...
- HDU 3065 (AC自动机模板题)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=3065 题目大意:多个模式串,范围是大写字母.匹配串的字符范围是(0~127).问匹配串中含有哪几种模 ...
- hdu 3065 AC自动机 标记数组不清零
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=3065 题目里面要我们计算每种单词出现的次数,重叠的也要计算,那么我们在查找的时候不要把标记单词结尾的 ...
- 病毒侵袭持续中 HDU - 3065 AC自动机
小t非常感谢大家帮忙解决了他的上一个问题.然而病毒侵袭持续中.在小t的不懈努力下,他发现了网路中的"万恶之源".这是一个庞大的病毒网站,他有着好多好多的病毒,但是这个网站包含的病毒 ...
- HDU 3065 AC自动机 裸题
中文题题意不再赘述 注意 失配数组 f 初始化一步到位 #include <stdio.h> #include <string.h> #include <queue&g ...
- hdu 3065 AC自动机模版题
题意:输出每个模式串出现的次数,查询的时候呢使用一个数组进行记录就好. 同上题一样的关键点,其他没什么难度了. #include <cstdio> #include <cstring ...
- hdu 2896 AC自动机
// hdu 2896 AC自动机 // // 题目大意: // // 给你n个短串,然后给你q串长字符串,要求每个长字符串中 // 是否出现短串,出现的短串各是什么 // // 解题思路: // / ...
- hdu 5880 AC自动机
Family View Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total ...
- hdu 2296 aC自动机+dp(得到价值最大的字符串)
Ring Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
随机推荐
- 五、HTML判断输入长度,体会字体颜色变化
<!doctype html><html lang="en"> <head> <meta charset="UTF-8" ...
- git 创建远程分支和删除 master 分支
. . . . . 最近需要将不同的客户的代码分开管理,所以需要为这些代码分别创建分支. 目前版本库中分支结构如下: [yuhuashi@local:Project]$ git branch -a* ...
- HDMI IP学习笔记
在HDMI的IP核中点击,生成例子.找到./simulaion/mentor文件夹,把modelsim路径转到该路径下,即可仿真.
- iOS打包ipa包
创建证书之类这里就不说了,毕竟我也没有弄过. 我是团队开发,直接给我的p12文件,去开发者中心下载provision并且是distribute的就可以了. 1>.Xcode打包: 注意两个地方都 ...
- JavaWeb 学习008-今日问题(非空验证尚未解决) 2016-12-2
1. 学生模块list页面 不能正常跳转 说是找不到stuid属性,但是我在entity里面和数据库建表的属性就是stuid:Grade模块代码一样,却可以正常运行 这是什么问题? <c:for ...
- draw: Could not use program error=0x505
原因:Android的模拟器在ADT中调试运行AVD时速度太慢.也就是说创建的虚拟手机配置太好,电脑带不动. 解决办法:从新创建虚拟手机,是手机配置低一点,具体创建方法如下: 开始先点运行,也就是下图 ...
- 支付宝App支付签名和验签
代码: using CMS.Utility.ReturnResult; using OAuthWebAPI.Package; using Common; using System; using Sys ...
- angular报$injector / unpr的错误
原因:angular引用未定义的错误,因为JS代码压缩过后找不到申明的变量,,没在使用之前定义,且代码被压缩,则报错(变量压缩后会变成单个字母无法识别,需在引用前分别定义): 解决:angular.m ...
- c++父类和子类转化致命的代码错误
最近在工作中,出现了严重的代码错误,对象的基类和子类的继承,代码大致如下: class A { }; class B : public A { } void main() { A* a;(用于子类对象 ...
- [[UIScreen mainScreen] bounds] 返回的屏幕尺寸不对
在使用cocos2d-iphone 2.0生成项目的时候,用5s测试时全屏中上下一直有黑条,发现[[UIScreen mainScreen] bounds]返回的屏幕尺寸不是320*568的,而是32 ...