hdu2896&&3065
题:http://acm.hdu.edu.cn/showproblem.php?pid=2896
分析:ac自动机模板
注意细节,1、128个ascii码都要;
2、只要关键码含有只输出一个编号就行
#include<iostream>
#include<queue>
#include<algorithm>
#include<cstring>
#include<string>
using namespace std;
typedef long long ll;
#define pb push_back
const int M=*;
const int N=;
int vis[N];
int n;
struct ac{
int tot,root;
int trie[M][],end[M],fail[M];
int newnode(){
for(int i=;i<;i++){
trie[tot][i]=-;
}
end[tot]=;
tot++;
return tot-;
}
void init(){
tot=;
root=newnode();
}
void insert(char *buf,int id){
int now=root,len=strlen(buf);
for(int i=;i<len;i++){
if(trie[now][buf[i]]==-)
trie[now][buf[i]]=newnode();
now=trie[now][buf[i]];
}
end[now]=id;
}
void getfail(){
queue<int>que;
while(!que.empty())
que.pop();
fail[root]=root;
for(int i=;i<;i++)
if(trie[root][i]==-)
trie[root][i]=;
else{
fail[trie[root][i]]=root;
que.push(trie[root][i]);
}
while(!que.empty()){
int now=que.front();
que.pop();
for(int i=;i<;i++){
if(trie[now][i]!=-){
fail[trie[now][i]]=trie[fail[now]][i];
que.push(trie[now][i]);
}
else
trie[now][i]=trie[fail[now]][i];
}
}
}
int query(char *buf){
int len=strlen(buf);
int ans=;
int now=root;
for(int i=;i<len;i++){
now=trie[now][buf[i]];
int tmp=now;
while(tmp!=root){
if(end[tmp]!=){
vis[end[tmp]]=;
ans++;
}
tmp=fail[tmp]; }
}
return ans;
}
}AC;
char s1[],s[];
int main(){
while(~scanf("%d",&n)){
AC.init();
int ans=;
for(int i=;i<=n;i++){
scanf("%s",s);
AC.insert(s,i);
}
AC.getfail();
int m;
scanf("%d",&m);
for(int i=;i<=m;i++){
memset(vis,,sizeof(vis));
scanf("%s",s1);
if(AC.query(s1)>=){
printf("web %d:",i);
for(int j=;j<=n;j++)
if(vis[j])
printf(" %d",j);
printf("\n");
ans++;
}
}
printf("total: %d\n",ans);
}
return ;
}
题:http://acm.hdu.edu.cn/showproblem.php?pid=3065
分析:只要将上题的vis改为技术数组即可
#include<iostream>
#include<queue>
#include<algorithm>
#include<cstring>
#include<string>
using namespace std;
typedef long long ll;
#define pb push_back
const int M=*;
const int N=;
char s[N][],s1[];
int n;
struct ac{
int tot,root;
int trie[M][],end[M],fail[M],vis[M];
int newnode(){
for(int i=;i<;i++){
trie[tot][i]=-;
}
end[tot++]=;
return tot-;
}
void init(){
tot=;
root=newnode();
}
void insert(char *buf,int id){
int len=strlen(buf);
int now=root;
for(int i=;i<len;i++){
if(trie[now][buf[i]]==-)
trie[now][buf[i]]=newnode();
now=trie[now][buf[i]];
}
end[now]=id;
}
void getfail(){
queue<int>que;
while(!que.empty()){
que.pop();
}
fail[root]=root;
for(int i=;i<;i++){
if(trie[root][i]==-)
trie[root][i]=root;
else{
fail[trie[root][i]]=root;
que.push(trie[root][i]);
}
}
while(!que.empty()){
int now=que.front();
que.pop();
for(int i=;i<;i++){
if(trie[now][i]!=-){
fail[trie[now][i]]=trie[fail[now]][i];
que.push(trie[now][i]);
}
else
trie[now][i]=trie[fail[now]][i];
}
}
}
void query(char *buf){
memset(vis,,sizeof(vis));
int len=strlen(buf);
int now=root;
for(int i=;i<len;i++){
now=trie[now][buf[i]];
int tmp=now;
while(tmp!=root){
if(end[tmp]!=)
vis[end[tmp]]++;
tmp=fail[tmp];
}
}
for(int i=;i<=n;i++)
if(vis[i]>)
printf("%s: %d\n",s[i],vis[i]);
}
}AC;
int main(){
while(scanf("%d",&n)==){
AC.init();
for(int i=;i<=n;i++){
scanf("%s",s[i]);
AC.insert(s[i],i);
}
AC.getfail(); scanf("%s",s1);
AC.query(s1);
}
return ;
}
hdu2896&&3065的更多相关文章
- 【HDU2896】病毒侵袭 AC自动机
[HDU2896]病毒侵袭 Problem Description 当太阳的光辉逐渐被月亮遮蔽,世界失去了光明,大地迎来最黑暗的时刻....在这样的时刻,人们却异常兴奋--我们能在有生之年看到500年 ...
- hdu 3065 AC自动机
// hdu 3065 AC自动机 // // 题目大意: // // 给你n个短串,然后给你一个长串,问:各个短串在长串中,出现了多少次 // // 解题思路: // // AC自动机,插入,构建, ...
- 【BZOJ】3065: 带插入区间K小值
http://www.lydsy.com/JudgeOnline/problem.php?id=3065 题意:带插入.修改的区间k小值在线查询.(原序列n<=35000, 询问<=175 ...
- AC自动机 - 多模式串的匹配运用 --- HDU 3065
病毒侵袭持续中 Problem's Link:http://acm.hdu.edu.cn/showproblem.php?pid=3065 Mean: 略 analyse: AC自动机的运用. 这一题 ...
- Sublime Text 3 Build 3065 All System CracKed By Hmily[LCG]
Sublime Text 3 Build 3065 All System CracKed By Hmily[LCG] <ignore_js_op> 程序员文本编辑器 Sublime Tex ...
- HDU 3065 (AC自动机模板题)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=3065 题目大意:多个模式串,范围是大写字母.匹配串的字符范围是(0~127).问匹配串中含有哪几种模 ...
- HDU 3065 病毒侵袭持续中
HDU 3065 病毒侵袭持续中 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- How to Cracked Sublime Text 3 Build 3065 in Ubuntu (Linux)
整理自How to Cracked Sublime Text 3 Build 3065 in Ubuntu (Linux) Sublime Text 3 Build 3065 Release Date ...
- bzoj 3065: 带插入区间K小值 替罪羊树 && AC300
3065: 带插入区间K小值 Time Limit: 60 Sec Memory Limit: 512 MBSubmit: 1062 Solved: 253[Submit][Status] Des ...
随机推荐
- PC端页面适应不同的分辨率的方法 (转载)
原文地址:https://blog.csdn.net/fengzhen8023/article/details/81281117 上周完成一个PC端的项目,对于我这样的小白来说,这个项目里面最大的问题 ...
- 2. react 简书 头部 (header) 样式编写
1. 在 src 下 创建 common 文件下 创建 header 文件夹下 创建 index.js #src/common/header/index.js import React, {Compo ...
- BGP(IBGP“内部路由器”和EBGP“外部路由器”)命令解析
BGP:基于策略的路径向量路由协议. ①:(attribute)属性描述路径. ②:使用TCP(端口179)作为传输协议——(IBGP多使用loopback端口建立update-source) IBG ...
- Airflow 使用 Celery 时,如何添加 Celery 配置
背景 前段时间我选用了 Airflow 对 wms 进行数据归档,在运行一段时间后,经常发现会报以下错误: [-- ::,: WARNING/ForkPoolWorker-] Failed opera ...
- 从单个系统到云翼一体化支撑,京东云DevOps推进中的一波三折
作者:王利莹 采访嘉宾:京东云DevOps团队负责人 郑永宽 今年,IDC 特别针对中国地区发布了<IDC MarketScape:中国 DevOps 云市场2019,厂商评估>研究报告, ...
- 吴裕雄--天生自然 JAVASCRIPT开发学习:语法
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- 201771010123汪慧和《面向对象程序设计Java》第十八周实验总结
一.总复习纲要 1. Java语言特点与开发环境配置(第1章.第2章) 2. Java基本程序结构(第3章) 3. Java面向对象程序结构(第4章.第5章.第6章) 4. 类.类间关系.类图 5. ...
- javascript的自定义对象/取消事件/事件兼容性/取消冒泡
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- CentOS 7 连接不到网络解决方法
使用VM12创建虚拟机并安装CentOS 7,但是安装完成后发现连接不到网络. ping jd.com发现不通 因为在创建虚拟机的时候我们选择的是NAT模式 这里给出NAT模式下对应的的解决方法: 一 ...
- 13. react 基础 redux 的基本介绍 及 用 antd 编写 TodoList 的样式
1. redux 简述 当 store 内的 数据进行变更的时候 多个组件感知到 store 内的数据变化 将会被自动更新 2. redux 工作流 Store 代表数据存储 (例如: 图书馆管理 ...