HDOJ 2896 病毒侵袭(AC自动机入门)
题意:
求感染病毒的网站,并输出其感染的病毒特征码编号。
思路:
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自动机入门)相关推荐
- HDU 2896 病毒侵袭 AC自动机
我表示不是很懂HDU卡内存的优良传统.......以及他们卡输出的良好风尚........ AC自动机裸体关键在于http://ascii.911cha.com/ #include<cstrin ...
- HDU - 2896 病毒侵袭(AC自动机)
题目链接:点击查看 题目大意:给出 n 个模式串,再给出 m 个匹配串,问有多少个模式串在匹配串中出现,需要分别对应上其编号 题目分析:对应编号问题我们可以直接开一个数组映射,也是比较经典的模板问题了 ...
- hdu2896 病毒侵袭 ac自动机
地址:http://acm.split.hdu.edu.cn/showproblem.php?pid=2896 题目: 病毒侵袭 Time Limit: 2000/1000 MS (Java/Othe ...
- hduoj-----(2896)病毒侵袭(ac自动机)
病毒侵袭 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submi ...
- HDU2896(病毒侵袭--AC自动机)
题目:病毒侵袭 #include <iostream> #include <string.h> #include <stdio.h> #include <al ...
- 【HDU2896】病毒侵袭——ac自动机
网上很多代码都略显繁琐,看了一下yy dalao的代码感觉很好,但他懒得打题解(好吧我也是 以0为根节点的话,我把yy的一段代码删了改用fail[c]=x==0?0:ch[fail[x]][i];来实 ...
- HDU 2896 病毒侵袭 AC自己主动机题解
本题是在text里面查找key word的增强版.由于这里有多个text. 那么就不能够简单把Trie的叶子标志记录改动成-1进行加速了,能够使用其它技术.我直接使用个vis数组记录已经訪问过的节点, ...
- hdu 2896 病毒侵袭
http://acm.hdu.edu.cn/showproblem.php?pid=2896 AC自动机的简单题...忘记关debug了,wa了一次...囧! View Code 1 #include ...
- hdu 2896 病毒侵袭(AC自动机)
病毒侵袭 Time Limit: 2000/1000 ...
最新文章
- [转]Java中常用的集合—初学者的你不可错过的精编整理
- python 深浅拷贝案例_python-浅拷贝、深拷贝实例以及讲解
- Linux Kernel TCP/IP Stack — L1 Layer
- css字体设置奇怪问题
- 降息大法好!银行4.35%消费贷了解一下?
- Guava新集合-Multiset
- 数据结构2 - 线性表
- 三星Galaxy S10系列外观配置爆料:多种颜色可选
- 根据xml文件生成对应javabean类
- 未来比较火的计算机领域,【火了】未来十年,中国人才最紧缺的6个专业!
- 疫情下的创业品牌如何逆风翻盘?
- jQuery Form Plugin (二) :使用AJAX提交Form表单
- 阶段3 1.Mybatis_07.Mybatis的连接池及事务_6 mybatis中的事务原理和自动提交设置
- setdate java_在PreparedStatement中使用setDate
- 28个python爬虫项目,你想要的爬虫知识都准备好了~~
- opensips(1)——安装opensips详细流程
- 轻松理解java前期绑定(静态绑定)与后期绑定(动态绑定) 的区别。
- 蚂蚁金服副总谈区块链
- suse linux乱码,轻松解决Suse中文乱码问题
- vs2010 LINK : fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏
热门文章
- Git和SourcesTree的安装
- 牛客练习赛20:D. 最短路2
- 带默认参数值的函数 内联函数
- GraphQL 、flask-graphql、Graphene| 一种配得上凡尔赛的API框架
- Backend Qt5Agg is interactive backend. Turning interactive mode on.
- Android开发:getSupportFragmentManager()不可用
- 团队项目前期冲刺-7
- springboot接口返回封装与异常控制
- 将windbg设置为默认调试器命令
- 风好大,我好冷——个人分工理解