【HDU】病毒侵袭(AC自己主动机模板题)
AC自己主动机的模板题。因为输入的字符串中的字符不保证全为小写字母。所以范围应该在130之前,而前31位字符是不可能出如今字符串的(不懂得查下ACSII表即可了)。所以仅仅须要开的结点数组大小为130足够了。假设开256就会内存超限。
| 11908775 | 2014-10-19 10:45:38 | Accepted | 2896 | 250MS | 29596K | rid=11908775" target="_blank" style="color:rgb(26,92,200); text-decoration:none">2760 B |
G++ | KinderRiven |
输入仅仅有一组,所以不用操心超时的问题。
#include<queue>
#include<cstdio>
#include<vector>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn = 111111;
const int max_size = 130;
const int maxd = 222;
vector<int>G[1111];
struct Trie{
int next[maxn][max_size];
int fail[maxn];
int val[maxn];
int sz;
int root;
int index(char e){
return e - 31;
}
void init(){
sz = 0;
root = newnode();
}
int newnode(){
val[sz] = 0;
memset(next[sz],-1,sizeof(next[sz]));
sz ++;
return sz - 1;
}
void insert(char *str,int pos){
int L = strlen(str);
int u = root;
for(int i = 0; i < L; i++){
int e = index(str[i]);
if(next[u][e] == -1)
next[u][e] = newnode();
u = next[u][e];
}
val[u] = pos;
//printf("%d %d\n",u,pos);
}
void build(){ //建立失配边
fail[root] = root;
queue<int>q;
for(int i = 0; i < max_size; i++){
if(next[root][i] == -1)
next[root][i] = root;
else{
fail[next[root][i]] = root;
q.push(next[root][i]);
}
}
while(!q.empty()){
int now = q.front(); q.pop();
for(int i = 0; i < max_size; i++){
if(next[now][i] == -1)
next[now][i] = next[fail[now]][i];
else{
fail[next[now][i]] = next[fail[now]][i];
q.push(next[now][i]);
}
}
}
}
void count(char *str,int pos){
int L = strlen(str);
int u = root;
for(int i = 0; i < L; i++){
int e = index(str[i]);
u = next[u][e];
int temp = u;
while(temp != root){
if(val[temp] != 0)
G[pos].push_back(val[temp]);
temp = fail[temp];
}
}
return;
}
};
Trie ac;
int main(){
int n,m;
ac.init();
scanf("%d",&n);
for(int i = 1; i <= n; i++){
char str[maxd];
scanf("%s",str);
ac.insert(str,i);
}
//printf("%d\n",ac.sz);
ac.build();
scanf("%d",&m);
for(int i = 1; i <= m; i++){
char str[maxn];
scanf("%s",str);
ac.count(str,i);
}
int cnt = 0;
for(int i = 1; i <= m; i++)if(G[i].size()){
sort(G[i].begin(),G[i].end());
cnt ++;
printf("web %d:",i);
for(int j = 0; j < G[i].size(); j++)
printf(" %d",G[i][j]);
printf("\n");
}
printf("total: %d\n",cnt);
}
【HDU】病毒侵袭(AC自己主动机模板题)的更多相关文章
- HDU 2896 病毒侵袭 (AC自己主动机)
pid=2896">http://acm.hdu.edu.cn/showproblem.php?pid=2896 病毒侵袭 Time Limit: 2000/1000 MS (Java ...
- hdu5384 AC自己主动机模板题,统计模式串在给定串中出现的个数
http://acm.hdu.edu.cn/showproblem.php?pid=5384 Problem Description Danganronpa is a video game franc ...
- NYOJ 1085 数单词 (AC自己主动机模板题)
数单词 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描写叙述 为了可以顺利通过英语四六级考试,如今大家每天早上都会早起读英语. LYH本来以为自己在6月份的考试中能够通过六 ...
- HDU 2896 病毒侵袭 AC自己主动机题解
本题是在text里面查找key word的增强版.由于这里有多个text. 那么就不能够简单把Trie的叶子标志记录改动成-1进行加速了,能够使用其它技术.我直接使用个vis数组记录已经訪问过的节点, ...
- HDU 2222 Keywords Search(AC自己主动机模板题)
题意:给出一个字符串和若干个模板,求出在文本串中出现的模板个数. 思路:由于有可能有反复的模板,trie树权值记录每一个模板出现的次数就可以. #include<cstdio> #incl ...
- HDU 5384 Danganronpa (AC自己主动机模板题)
题意:给出n个文本和m个模板.求每一个文本中全部模板出现的总次数. 思路:Trie树权值记录每一个模板的个数.对于每一个文本跑一边find就可以. #include<cstdio> #in ...
- AC自己主动机模板
AC自己主动机模板-- /* * AC自己主动机模板 * 用法: * 1.init() : 初始化函数 * 2.insert(str) : 插入字符串函数 * 3.build() : 构建ac自己主动 ...
- hdu2222--Keywords Search+AC自己主动机模板
题目链接:pid=2222">点击进入 KMP对模式串进行处理.然后就能够方便的推断模式串是否在目标串中出现了:这显示适合一个模式串多个目标串的情况.可是假设模式串有多个,这时假设还用 ...
- HDU 2222 Keywords Search AC自己主动机入门题
单词统计的题目,给出一些单词,统计有多少单词在一个文本中出现,最经典的入门题了. AC自己主动机的基础: 1 Trie. 以这个数据结构为基础的,只是添加一个fail指针和构造fail的函数 2 KM ...
随机推荐
- 查看JSP和Servlet版本+
如何查看JSP和Servlet版本 找到jsp-api.jar和servlet-api.jar ,分别打开META-INF下的MAINMEFT.MF文件,查看对应的版本. 例: JSP版本: Mani ...
- 【Codeforces Round #427 (Div. 2) D】Palindromic characteristics
[Link]:http://codeforces.com/contest/835/problem/D [Description] 给你一个字符串; 让你在其中找到1..k阶的回文子串; 并统计它们的数 ...
- php课程 18-60 cookie和session的最主要区别是什么
php课程 18-60 cookie和session的最主要区别是什么 一.总结 一句话总结:存储位置不同:cookie存储在客户端:session存储在服务端. 1.cookie和session在p ...
- golang sync.WaitGroup
//阻塞,直到WaitGroup中的所以过程完成. import ( "fmt" "sync" ) func wgProcess(wg *sync.WaitGr ...
- DG观察日志传输
--primary端查询v$archived_log视图,确认日志是否被应用: set lines 300 pages 300 col name for a20 select name,dest_ ...
- A glance on VDBI
Just like other thing in data transfter, a resource should have themselves description. And the reso ...
- 数值溢出(arithmetic overflow)问题与解决方案
0. 典型场景 两数相加(乘法).两数相减.一个数的阶乘,一个数的幂,这些统统可能造成数值的溢出: 避免数值溢出的方法: 当把一个计算出的很大的数赋值给一个 int(2^31-1)类型变量存储时,一般 ...
- python一切皆对象的理解
min_error=pls(x_train, x_test, y_train, y_test) #这里我之前写的是error,但是前面有一个定义的error函数.所以导致出现了警告. 可能是因为pyt ...
- Mongodb总结4-Spring环境使用Mongodb
前几次的例子,要么是Shell,要么是普通Java应用程序的例子.实际情况,是要在Spring的项目里用,因此需要做一些改造. 1.配置文件C:\hanhai\config\mongodb.prope ...
- 原生js大总结十一
101.请简述prototype.__proto__ constructor三者的关系 1.prototype: 每一个函数都有一个prototype这个属性,而这个属性指向一个对象,这个 ...