hihoCoder--1036 Trie图(AC自动机)
来源:互联网 发布:如何申请网络域名 编辑:程序博客网 时间:2024/05/16 00:33
problem link
题解
#include <bits/stdc++.h>using namespace std;const int maxn = 26;const int maxn_node = 500010;struct Node{ Node* next[maxn]; Node* fail; int cnt; Node(){ fail = NULL; cnt = 0; memset(next, 0, sizeof(next)); }};void build_trie(string s, Node* root){ for(int i = 0; i < s.length(); ++i){ int id = s[i] - 'a'; if(!root->next[id]) root->next[id] = new Node(); root = root->next[id]; } root->cnt++;}void build_fail(Node* root){ root->fail = NULL; queue<Node*> Q; Q.push(root); while(!Q.empty()){ Node* cur = Q.front(); Q.pop(); for(int i = 0; i < maxn; ++i){ if(cur->next[i]){ if(cur == root){ cur->next[i]->fail = root; }else{ Node* p = cur->fail; while(p){ if(p->next[i]){ cur->next[i]->fail = p->next[i]; break; } p = p->fail; } if(p == NULL){ cur->next[i]->fail = root; } } Q.push(cur->next[i]); } } }}bool query(string text, Node* root){ Node* p = root; int cnt = 0; for(int i = 0; i < text.length(); ++i){ int id = text[i] - 'a'; while(p->next[id] == NULL && p != root) p = p->fail; p = p->next[id]; if(p == NULL) p = root; Node* tmp = p; while(tmp != root && tmp->cnt != -1){ cnt += tmp->cnt; tmp->cnt = -1; tmp = tmp->fail; } } return cnt > 0;}int main(){#ifdef EXMYfreopen("data.in", "r", stdin);#endif // EXMY int n; string s, text; Node* root = new Node(); cin >> n; while(n--){ cin >> s; build_trie(s, root); } build_fail(root); cin >> text; if(query(text, root)) cout << "YES" << endl; else cout << "NO" << endl;}
0 0
- hihoCoder #1036 : Trie图 (AC自动机)
- hihoCoder 1036 Trie图(AC自动机)
- HiHocoder 1036 : Trie图 AC自动机
- hihoCoder--1036 Trie图(AC自动机)
- hihoCoder 1036 AC自动机 Trie图
- hihoCoder 1036 Trie图 AC自动机
- hihocoder-1036 Trie图(Trie图||AC自动机)
- hihocoder Trie图(AC自动机)
- 【Ac自动机 查询是否存在一个字典中的字符串】hihocoder 1036 Trie图
- Trie 图 AC自动机
- 【算法】AC自动机--Trie图
- AC自动机 (Trie图优化)
- hdu2222,AC自动机,trie图
- HihoCoder1036[Trie图 ] AC自动机
- AC自动机(Trie图)
- hihocoder第四周---用的Trie图---当然有很多用AC自动机的
- 病毒侵袭 (HDU_2896) AC自动机(Trie图)
- Trie图 & AC自动机初学(1)
- 如何解决 error adding symbols: Bad value 问题
- Java反射
- CC2541关于OAD空中升级(安卓客户端收不到服务的)
- Ubuntu下安装opencv 2.4.11
- POJ-1787 Charlie's Change( 多重背包记录方案)
- hihoCoder--1036 Trie图(AC自动机)
- 经典的机器人入门资料
- Mac下配置本地Maven
- Docker简单使用
- webpack设置服务代理
- mtk 拍照流程分析
- 【Android(BLE)】Android(BLE)之蓝牙权限和feature
- jQuery选择器总结
- fork系统进程测试框架及学习方法说明