题意:

求感染病毒的网站,并输出其感染的病毒特征码编号。

思路:

AC自动机入门,思路同 HDOJ 2222

#include <iostream>
#include <deque>
#include <algorithm>
using namespace std;const int MAX_NODE = 500 * 200 + 10;
const int CHILD_NUM = 128;class AcAutomaton
{private:int size;int trie[MAX_NODE][CHILD_NUM];int fail[MAX_NODE];int value[MAX_NODE];int table[CHILD_NUM];bool visit[MAX_NODE];public:void Initialize(){fail[0] = 0;for (int i = 0; i < CHILD_NUM; ++i)table[i] = i;}void Reset(){size = 1;memset(trie[0], 0, sizeof(trie[0]));memset(value, 0, sizeof(value));}void Insert(char* word, int key){int p = 0;for (int i = 0; word[i]; ++i){int m = table[word[i]];if (!trie[p][m]){memset(trie[size], 0, sizeof(trie[0]));trie[p][m] = size++;}p = trie[p][m];}value[p] = key;}void Construct(){deque<int> que;for (int i = 0; i < CHILD_NUM; ++i)if (trie[0][i]){fail[trie[0][i]] = 0;que.push_back(trie[0][i]);}while (!que.empty()){int u = que.front();que.pop_front();for (int i = 0; i < CHILD_NUM; ++i){int& v = trie[u][i];if (v){que.push_back(v);fail[v] = trie[fail[u]][i];}elsev = trie[fail[u]][i];}}}int Work(char* word, int arr[]){memset(visit, false, sizeof(visit));int num = 0, p = 0;for (int i = 0; word[i]; ++i){int m = table[word[i]];int t = p = trie[p][m];while (value[t] && !visit[t]){arr[num++] = value[t];visit[t] = true;t = fail[t];if (num >= 3)return num;}}return num;}
};AcAutomaton Ac;
char word[10010];int main()
{int n;scanf("%d", &n);Ac.Initialize();Ac.Reset();char is[210];for (int i = 1; i <= n; ++i){scanf("%s", is);Ac.Insert(is, i);}Ac.Construct();scanf("%d", &n);int count = 0;for (int i = 1; i <= n; ++i){int arr[12], num = 0;scanf("%s", word);num = Ac.Work(word, arr);if (num){sort(arr, arr + num);printf("web %d:", i);for (int j = 0; j < num; ++j)printf(" %d", arr[j]);printf("\n");++count;}}printf("total: %d\n", count);return 0;
}

转载于:https://www.cnblogs.com/kedebug/archive/2013/01/28/2880503.html

HDOJ 2896 病毒侵袭(AC自动机入门)相关推荐

  1. HDU 2896 病毒侵袭 AC自动机

    我表示不是很懂HDU卡内存的优良传统.......以及他们卡输出的良好风尚........ AC自动机裸体关键在于http://ascii.911cha.com/ #include<cstrin ...

  2. HDU - 2896 病毒侵袭(AC自动机)

    题目链接:点击查看 题目大意:给出 n 个模式串,再给出 m 个匹配串,问有多少个模式串在匹配串中出现,需要分别对应上其编号 题目分析:对应编号问题我们可以直接开一个数组映射,也是比较经典的模板问题了 ...

  3. hdu2896 病毒侵袭 ac自动机

    地址:http://acm.split.hdu.edu.cn/showproblem.php?pid=2896 题目: 病毒侵袭 Time Limit: 2000/1000 MS (Java/Othe ...

  4. hduoj-----(2896)病毒侵袭(ac自动机)

    病毒侵袭 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submi ...

  5. HDU2896(病毒侵袭--AC自动机)

    题目:病毒侵袭 #include <iostream> #include <string.h> #include <stdio.h> #include <al ...

  6. 【HDU2896】病毒侵袭——ac自动机

    网上很多代码都略显繁琐,看了一下yy dalao的代码感觉很好,但他懒得打题解(好吧我也是 以0为根节点的话,我把yy的一段代码删了改用fail[c]=x==0?0:ch[fail[x]][i];来实 ...

  7. HDU 2896 病毒侵袭 AC自己主动机题解

    本题是在text里面查找key word的增强版.由于这里有多个text. 那么就不能够简单把Trie的叶子标志记录改动成-1进行加速了,能够使用其它技术.我直接使用个vis数组记录已经訪问过的节点, ...

  8. hdu 2896 病毒侵袭

    http://acm.hdu.edu.cn/showproblem.php?pid=2896 AC自动机的简单题...忘记关debug了,wa了一次...囧! View Code 1 #include ...

  9. hdu 2896 病毒侵袭(AC自动机)

    病毒侵袭                                                                           Time Limit: 2000/1000 ...

最新文章

  1. [转]Java中常用的集合—初学者的你不可错过的精编整理
  2. python 深浅拷贝案例_python-浅拷贝、深拷贝实例以及讲解
  3. Linux Kernel TCP/IP Stack — L1 Layer
  4. css字体设置奇怪问题
  5. 降息大法好!银行4.35%消费贷了解一下?
  6. Guava新集合-Multiset
  7. 数据结构2 - 线性表
  8. 三星Galaxy S10系列外观配置爆料:多种颜色可选
  9. 根据xml文件生成对应javabean类
  10. 未来比较火的计算机领域,【火了】未来十年,中国人才最紧缺的6个专业!
  11. 疫情下的创业品牌如何逆风翻盘?
  12. jQuery Form Plugin (二) :使用AJAX提交Form表单
  13. 阶段3 1.Mybatis_07.Mybatis的连接池及事务_6 mybatis中的事务原理和自动提交设置
  14. setdate java_在PreparedStatement中使用setDate
  15. 28个python爬虫项目,你想要的爬虫知识都准备好了~~
  16. opensips(1)——安装opensips详细流程
  17. 轻松理解java前期绑定(静态绑定)与后期绑定(动态绑定) 的区别。
  18. 蚂蚁金服副总谈区块链
  19. suse linux乱码,轻松解决Suse中文乱码问题
  20. vs2010 LINK : fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏

热门文章

  1. Git和SourcesTree的安装
  2. 牛客练习赛20:D. 最短路2
  3. 带默认参数值的函数 内联函数
  4. GraphQL 、flask-graphql、Graphene| 一种配得上凡尔赛的API框架
  5. Backend Qt5Agg is interactive backend. Turning interactive mode on.
  6. Android开发:getSupportFragmentManager()不可用
  7. 团队项目前期冲刺-7
  8. springboot接口返回封装与异常控制
  9. 将windbg设置为默认调试器命令
  10. 风好大,我好冷——个人分工理解