[kuangbin带你飞]专题17:C
来源:互联网 发布:淘宝会员名大全 好听 编辑:程序博客网 时间:2024/06/05 20:31
原题
#include<iostream>#include<cstring> #include<string>#include<cstdio>#include<queue>using namespace std;const int MAXN = 1010*55;int Next[MAXN][26], fail[MAXN], v[MAXN];int L, root;int num[1010];string s2[1010];int N;int newnode() { for(int i = 0; i < 26; i++) Next[L][i] = -1; fail[L] = -1; v[L] = 0; L++; return L-1;}void insert(string s, int n) { int l = (int)s.length(); int now = root; for(int i = 0; i < l; i++) { int id = s[i]- 'A'; if(Next[now][id] == -1) Next[now][id] = newnode(); now = Next[now][id]; } v[now] = n;}void setfail() { queue<int> q; q.push(root); while(!q.empty()) { int now = q.front(); q.pop(); for(int i = 0; i < 26; i++) if(Next[now][i] != -1) { int pre = fail[now]; while(pre != -1 && Next[pre][i] == -1) pre = fail[pre]; fail[Next[now][i]] = pre == -1 ? root : Next[pre][i]; q.push(Next[now][i]); } }}void query(string s) { int now = root; int l = (int)s.length(); for(int i = 0; i < l; i++) { int id = s[i] - 'A'; if(id < 0 || id >= 26) now = -1; while(now != -1 && Next[now][id] == -1) now = fail[now]; now = now == -1 ? root : Next[now][id]; for(int p = now; p != -1; p = fail[p]) if(v[p]) { num[v[p]]++; } } for(int i = 1; i <= N; i++) if(num[i]) cout << s2[i] << ": " << num[i] << endl;}int main() { ios::sync_with_stdio(false); freopen("a.in", "r", stdin); while(cin >> N) { //初始化 L = 0; root = newnode(); memset(num, 0, sizeof(num)); for(int i = 1; i <= N; i++) { cin >> s2[i]; insert(s2[i], i); } setfail(); string ss; cin >> ss; query(ss); } return 0;}
阅读全文
0 0
- [kuangbin带你飞]专题17:C
- [kuangbin带你飞]专题17:D
- [kuangbin带你飞]专题17:A
- [kuangbin带你飞]专题17:B
- [kuangbin带你飞]专题一 简单搜索 C POJ3278
- [kuangbin带你飞]专题四 最短路练习 C
- [kuangbin带你飞]专题六 最小生成树 C
- kuangbin带你飞专题一(搜索)C
- [kuangbin带你飞]专题八 生成树 C
- [kuangbin带你飞]专题一 简单搜索 C
- [kuangbin带你飞]专题一 简单搜索-C
- [kuangbin带你飞]专题十一 网络流 C POJ
- [kuangbin带你飞]专题十二 基础DP1 C
- 3278 & [kuangbin带你飞]专题一 简单搜索 C
- [kuangbin带你飞]专题二 搜索进阶 C
- [kuangbin带你飞]专题一 简单搜索 C
- [kuangbin带你飞]专题十七 AC自动机 C
- [kuangbin带你飞]专题七 线段树 C
- JDBC访问数据结构
- Java集合系列(三)
- 【20170927】C语言每日一练
- 排序算法 -- 冒泡排序
- Opencv(-)
- [kuangbin带你飞]专题17:C
- 工作第二个月总结
- 行人去重文整理总结
- 【Python】beautifusoup解析HTML并将数据写入文件
- 创建对象_你只要看懂这篇文章
- php常用函数随笔
- leetcode 279. Perfect Squares 一个很不错的DP
- 315. Count of Smaller Numbers After Self
- .NET研发人员面试题(一)