HDU 2896 病毒侵袭 (AC自动机)
这题模板题.............但是竟然要去重........调试了半天才发现....................
- #include <cstdio>
- #include <iostream>
- #include <cstring>
- #include <cmath>
- #include <algorithm>
- using namespace std;
- struct trie {
- trie *next[128];
- int flag;
- int num;
- trie *fail;
- trie() {
- fail = NULL;
- flag = num = 0;
- memset(next,0,sizeof(next));
- }
- }*q[511111];
- trie *rt = new trie();
- int vi[555],cnt,head,tail;
- char keyword[222];
- char book[11111];
- void insert(char *key,int num) {
- trie *p = rt;
- while(*key) {
- int t = int(*key);
- if(p->next[t] == NULL) p->next[t] = new trie();
- p = p->next[t];
- key ++;
- }
- p->flag = 1;
- p->num = num;
- }
- void bfs() {
- rt->fail = NULL;
- head = tail = 0;
- q[head++] = rt;
- while(head != tail) {
- trie *t = q[tail++];
- trie *tmp = NULL;
- for(int i=0; i<128; i++) {
- if(t->next[i] != NULL) {
- if(t == rt ) t->next[i]->fail = rt;
- else {
- tmp = t->fail; //沿着父亲的fail指针走
- while(tmp != NULL) {
- if(tmp->next[i] != NULL) {
- t->next[i]->fail = tmp->next[i];
- break;
- }
- tmp = tmp->fail;
- }
- if(tmp == NULL) t->next[i]->fail = rt;
- }
- q[head++] = t->next[i];
- }
- }
- }
- }
- void query(char *key) {
- trie *p = rt;
- cnt = 0;
- int ok = 0;
- while(*key) {
- int t = int(*key);
- while(p != rt && p->next[t] == NULL) p = p->fail;
- p = p->next[t];
- if(p == NULL) p = rt;
- trie *tmp = p;
- while(tmp != rt && tmp->flag != 0) {
- vi[cnt] = tmp->num;
- cnt += tmp->flag;
- tmp = tmp->fail;
- }
- key++;
- }
- }
- int main() {
- int n,m;
- cin >> n;
- getchar();
- for(int i=0; i<n; i++) {
- gets(keyword);
- insert(keyword,i+1);
- }
- bfs();
- int ans = 0;
- cin >> m;
- getchar();
- for(int i=1; i<=m; i++) {
- gets(book);
- memset(vi,0,sizeof(vi));
- cnt = 0;
- query(book);
- if(cnt != 0) {
- ans ++;
- printf("web %d:",i);
- sort(vi,vi+cnt);
- int dd = unique(vi , vi + cnt) - vi;
- for(int j=0; j<dd; j++) printf(" %d",vi[j]);
- puts("");
- }
- }
- printf("total: %d\n",ans);
- return 0;
- }
HDU 2896 病毒侵袭 (AC自动机)的更多相关文章
- hdu 2896 病毒侵袭 ac自动机
/* hdu 2896 病毒侵袭 ac自动机 从题意得知,模式串中没有重复的串出现,所以结构体中可以将last[](后缀链接)数组去掉 last[]数组主要是记录具有相同后缀模式串的末尾节点编号 .本 ...
- hdu 2896 病毒侵袭 AC自动机(查找包含哪些子串)
病毒侵袭 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- hdu 2896 病毒侵袭 AC自动机 基础题
病毒侵袭 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submi ...
- HDU 2896 病毒侵袭 (AC自己主动机)
pid=2896">http://acm.hdu.edu.cn/showproblem.php?pid=2896 病毒侵袭 Time Limit: 2000/1000 MS (Java ...
- hdu 2896 病毒侵袭_ac自动机
题意:略 思路:套用ac自动机模板 #include <iostream> #include<cstdio> #include<cstring> using nam ...
- HDU 2896 病毒侵袭 AC自己主动机题解
本题是在text里面查找key word的增强版.由于这里有多个text. 那么就不能够简单把Trie的叶子标志记录改动成-1进行加速了,能够使用其它技术.我直接使用个vis数组记录已经訪问过的节点, ...
- HDU 2896 病毒侵袭(AC自动机水)
病毒侵袭 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submi ...
- HDU 2896 病毒侵袭(AC自动机)
病毒侵袭 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- HDU 2896 病毒侵袭【AC自动机】
<题目链接> Problem Description 当太阳的光辉逐渐被月亮遮蔽,世界失去了光明,大地迎来最黑暗的时刻....在这样的时刻,人们却异常兴奋——我们能在有生之年看到500年一 ...
- hdu2896 病毒侵袭 ac自动机
地址:http://acm.split.hdu.edu.cn/showproblem.php?pid=2896 题目: 病毒侵袭 Time Limit: 2000/1000 MS (Java/Othe ...
随机推荐
- C++快速排序实现(quicksort)
quicksort:分治思想. 分解:数组A[p, r)被划分成两个子数组A[pq) 和 A[q+1, r),使得A[pq)中的每个元素小于等于A[q], A[q]也小于A[q+1r)中的每个元素.q ...
- 向null地址copy数据和不断改变指针指向
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> #include<string. ...
- yum 使用说明
linux如何安装yum 使用YUM来安装软件,就可以不用去到处找依赖关系的RPM了.很方便. 第一步:安装yum 第二步:下载createrepo包并安装 下载地址: ftp://195.220. ...
- BZOJ1668: [Usaco2006 Oct]Cow Pie Treasures 馅饼里的财富
1668: [Usaco2006 Oct]Cow Pie Treasures 馅饼里的财富 Time Limit: 3 Sec Memory Limit: 64 MBSubmit: 459 Sol ...
- HDOJ 1266 Reverse Number(数字反向输出题)
Problem Description Welcome to 2006'4 computer college programming contest! Specially, I give my bes ...
- .net连接oracle(无客户端)
使用DDTek.Oracle.dll可以在没有安装oracle客户端的情况下连接远程的oracle. string _conString = "Host=192.168.1.1;Port=1 ...
- 使用java创建kafka的生产者和消费者
创建一个Kafka的主题,连接到zk集群,副本因子3,分区3,主题名是test111 [root@h5 kafka]# bin/kafka-topics.sh --create --zo ...
- zoj3422Go Deeper(2-sat + 二分)
题目请戳这里 题目大意: go(int dep, int n, int m) begin output the value of dep. if dep < m and x[a[dep]] + ...
- 2017年开年的第一次比较大的安全事件: MongoDB “赎金事件”,如何看待互联网安全问题
今天上午(2017年1月7日),我的微信群中同时出现了两个MongoDB被黑掉要赎金的情况,于是在调查过程中,发现了这个事件.这个事件应该是2017年开年的第一次比较大的安全事件吧,发现国内居然没有什 ...
- MYSQL存储过程和函数学习笔记
学至Tarena金牌讲师,金色晨曦科技公司技术总监沙利穆课程笔记的综合. 1. 什么是存储过程和函数 将SQL语句放入一个集合里,然后直接调用存储过程和函数来执行已经定义好的SQL语句,通过存储过程和 ...