题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4787

题目大意:

给你若干个单词,查询一篇文章里出现的单词数。。

就是被我水过去的。。。暴力重建AC自动机- -然后暴力查找。。

 #include <cstdio>
#include <cstring>
#include <algorithm>
#include <queue>
#include <map>
#include <string>
#include <set>
using namespace std; #define CHARSET 2
#define MAX_NODE 1010000 int T,N;
char inp[]; struct trieNode{
int ch[CHARSET];
int cnt;
//bool vis;
};
trieNode trie[MAX_NODE];
int ptr,fail[MAX_NODE]; void init(){
memset(fail,,sizeof(fail));
ptr = ;
for(int i=;i<CHARSET;i++){
trie[].ch[i] = -;
}
trie[].cnt = ;
//trie[0].vis = false;
} int newNode(){
ptr++;
for(int i=;i<CHARSET;i++){
trie[ptr].ch[i] = -;
}
trie[ptr].cnt = ;
//trie[ptr].vis = false;
return ptr;
} void insert(const char* str,int L){
// printf("insert:");
int len = strlen(str);
int rt = ;
L %= len;
for(int i=;i<len;i++){
//trie[rt].vis = true;
int id = str[(i+L)%len] -'';
// printf("%d",id);
if(trie[rt].ch[id]==-){
trie[rt].ch[id] = newNode();
}
rt = trie[rt].ch[id];
}
//trie[rt].vis = true;
trie[rt].cnt = ;
// puts("");
} void build(){
queue<int> q;
//trie[0].vis = false;
q.push();
fail[] = -;
while(!q.empty()){
int t = q.front(); q.pop();
for(int i=;i<CHARSET;i++){
int v = trie[t].ch[i];
if( v==- ) continue;
// if( trie[v].vis ){
// trie[v].vis = false;
// } else continue;
int f = fail[t];
while(f!=-&&trie[f].ch[i]==-){
f = fail[f];
}
if(f==-) fail[v] = ;
else fail[v] = trie[f].ch[i];
q.push(v);
}
}
} int query(const char *str,int L){
// printf("query:");
int res = ;
int rt = ;
int len = strlen(str);
L %= len;
for(int i=;i<len;i++){
int id = str[(i+L)%len] - '';
// printf("%d",id);
while(rt&&trie[rt].ch[id]==-) rt = fail[rt];
rt = trie[rt].ch[id]; if(rt==-){
rt = ;
continue;
} int now = rt;
while(now!=-){
res += trie[now].cnt;
now = fail[now];
}
}
// puts("");
return res;
} int main(){
// freopen("output.txt","w",stdout);
scanf("%d",&T);
for(int t=;t<=T;t++){
int L = ;
init();
printf("Case #%d:\n",t);
scanf("%d",&N);
while(N--){
scanf("%s",inp);
if( inp[]=='+' ){
insert(inp+,L);
} else {
build();
int ans = query(inp+,L);
L = ans;
printf("%d\n",ans);
}
}
}
return ;
}

[HDU 4787] GRE Words Revenge (AC自动机)的更多相关文章

  1. HDU 3341 Lost's revenge AC自动机+dp

    Lost's revenge Time Limit: 15000/5000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others)T ...

  2. ●HDU 4787 GRE Words Revenge

    题链: http://acm.hdu.edu.cn/showproblem.php?pid=4787 题解: AC自动机(强制在线构造) 题目大意: 有两种操作, 一种为:+S,表示增加模式串S, 另 ...

  3. GRE Words Revenge AC自动机 二进制分组

    GRE Words Revenge 题意和思路都和上一篇差不多. 有一个区别就是需要移动字符串.关于这个字符串,可以用3次reverse来转换, 前面部分翻转一下, 后面部分翻转一下, 最后整个串翻转 ...

  4. hdu 4117 GRE Words (ac自动机 线段树 dp)

    参考:http://blog.csdn.net/no__stop/article/details/12287843 此题利用了ac自动机fail树的性质,fail指针建立为树,表示父节点是孩子节点的后 ...

  5. HDU 4787 GRE Words Revenge

    Description Now Coach Pang is preparing for the Graduate Record Examinations as George did in 2011. ...

  6. HDU 2457 DNA repair(AC自动机+DP)题解

    题意:给你几个模式串,问你主串最少改几个字符能够使主串不包含模式串 思路:从昨天中午开始研究,研究到现在终于看懂了.既然是多模匹配,我们是要用到AC自动机的.我们把主串放到AC自动机上跑,并保证不出现 ...

  7. HDU 5384 字典树、AC自动机

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=5384 用字典树.AC自动机两种做法都可以做 #include<stdio.h> #includ ...

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

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

  9. HDU 2222 Keywords Search(AC自动机模版题)

    Keywords Search Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others ...

随机推荐

  1. iOS 下拉刷新和加载更多 (OC\Swift)

    Swift语言出来之后, 可能还没有第三方的下拉刷新和上提加载, 所以自己用UIRefreshControl控件和UITableView实例的tableFooterView(底部视图)属性结合起来写了 ...

  2. oracle row_number()

    要求查询每个用户对应的最大样品信息,忽然想到ms sql提供过 row_number() over(partition by 列 order by 列 desc),那么oracle可能也存在, 我的表 ...

  3. Google将数十亿行代码储存在单一的源码库

    过去16年,Google使用一个中心化源码控制系统去管理一个日益庞大的单一共享源码库.它的代码库包含了约10亿个文件(有重复文件和分支)和 3500万行注解,86TB数据,900万唯一源文件中含有大约 ...

  4. sqlserver快照,启用基于行版本控制的隔离级别

    在sqlserver标准的已提交读(read committed)隔离级别下,读写操作相互阻塞.未提交读(read uncommitted)虽然不会有这种阻塞,但是读操作可能会读到脏数据,这是大部分用 ...

  5. SET Transaction Isolation Level Read语法的四种情况

    转自:http://www.cnblogs.com/qanholas/archive/2012/01/04/2312152.html 存储过程:SET Transaction Isolation Le ...

  6. ASP.NET MVC 出现错误 “The view 'XXX' or its master was not found or no view engine support”

    来自:http://www.dengyukeji.com/archiver/tid-151.html 错误如下:The view 'XXX' or its master was not found o ...

  7. mysql.server 文件修改起动多实例

    如果你用mysql.server来启动的话,就要注意一下点,要修改一下里面的内容,修改如下:大约218行左右 查看复制打印? then print_defaults="$bindir/mys ...

  8. VBA 按照文件类型名称打开一个文件

    Application.GetOpenFilename(fileFilter, fileIndex, fileSelectTitle, button, False) fileFilter: 指定能够被 ...

  9. Servlet Filter 2

    10.Filter常见应用 )统一全站字符编码的过滤器 通过配置参数encoding指明使用何种字符编码,以处理Html Form请求参数的中文问题 案例:编写jsp 输入用户名,在Servlet中获 ...

  10. bzoj3319: 黑白树

    Description 给定一棵树,边的颜色为黑或白,初始时全部为白色.维护两个操作:1.查询u到根路径上的第一条黑色边的标号.2.将u到v    路径上的所有边的颜色设为黑色.Notice:这棵树的 ...