ZOJ 3228 Searching the String (AC自己主动机)
题目链接:Searching the String
解析:给一个长串。给n个不同种类的短串。问分别在能重叠下或者不能重叠下短串在长串中出现的次数。
能重叠的已经是最简单的AC自己主动机模板题了。
不能重叠的记录一下每一个匹配的串的起始位置保证不重叠就可以。
AC代码:
#include <bits/stdc++.h>
using namespace std; struct Trie{
int next[600010][26], fail[600010], deep[600010];
int root, L; int newnode(){
for(int i = 0; i < 26; i++) next[L][i] = -1;
L ++;
return L-1;
} void init(){
L = 0;
root = newnode();
deep[root] = 0;
} int insert(char buf[]){
int len = strlen(buf);
int now = root;
for(int i = 0; i < len; i++){
if(next[now][ buf[i] - 'a' ] == -1){
next[now][ buf[i] - 'a' ] = newnode();
deep[next[now][buf[i] - 'a']] = i+1;
}
now = next[now][ buf[i] - 'a' ];
}
return now;
} void build(){
queue<int> Q;
fail[root] = root;
for(int i = 0; i < 26; 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 < 26; 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]);
}
}
}
} int cnt[600010][2]; //cnt[][0]表示能重叠的,cnt[][1]表示不能重叠的
int last[600010]; //上次匹配的字符
void query(char buf[]){
memset(cnt, 0, sizeof(cnt));
memset(last, -1, sizeof(last));
int len = strlen(buf);
int now = root;
for(int i = 0; i < len; i++){
now = next[now][ buf[i] - 'a' ];
int temp = now;
while(temp != root){
cnt[temp][0] ++;
if(i - last[temp] >= deep[temp]){ //保证不重叠
last[temp] = i;
cnt[temp][1] ++;
}
temp = fail[temp];
}
}
}
}; char buf[20];
char str[100010];
int typ[100010], pos[100010];
Trie ac; int main(){
#ifdef sxk
freopen("in.txt", "r", stdin);
#endif //sxk int n;
int kase = 0;
while(scanf("%s", str) == 1){
scanf("%d", &n);
ac.init();
for(int i = 0; i < n; i++){
scanf("%d%s", &typ[i], buf);
pos[i] = ac.insert(buf);
}
ac.build();
ac.query(str);
printf("Case %d\n", ++kase);
for(int i=0; i<n; i++)
printf("%d\n", ac.cnt[pos[i]][typ[i]]);
printf("\n");
}
return 0;
}
ZOJ 3228 Searching the String (AC自己主动机)的更多相关文章
- ZOJ - 3228 Searching the String (AC自己主动机)
Description Little jay really hates to deal with string. But moondy likes it very much, and she's so ...
- ZOJ 3228 Searching the String(AC自动机)
Searching the String Time Limit: 7 Seconds Memory Limit: 129872 KB Little jay really hates to d ...
- ZOJ 3494 BCD Code (AC自己主动机 + 数位DP)
题目链接:BCD Code 解析:n个病毒串.问给定区间上有多少个转换成BCD码后不包括病毒串的数. 很奇妙的题目. . 经典的 AC自己主动机 + 数位DP 的题目. 首先使用AC自己主动机,得到b ...
- zoj 3228:Searching the String
Description Little jay really hates to deal with string. But moondy likes it very much, and she's so ...
- Zoj 3545 Rescue the Rabbit(ac自己主动机+dp)
标题效果: 鉴于DNA有一个正确的顺序值.请构造一个长度I的DNA在这个序列使DNA正确的顺序值极大.它被认为是负的输出噼啪. .. IDEAS: 施工顺序是,ac己主动机上走,求最大要用到dp dp ...
- zoj 3430 Detect the Virus(AC自己主动机)
题目连接:zoj 3430 Detect the Virus 题目大意:给定一个编码完的串,将每个字符相应着表的数值转换成6位二进制.然后以8为一个数值,又一次形成字符 串,推断给定询问串是否含有字符 ...
- zoj 3430 Detect the Virus(AC自己主动机)
Detect the Virus Time Limit: 2 Seconds Memory Limit: 65536 KB One day, Nobita found that his co ...
- AC自己主动机
AC自己主动机 AC自己主动机是KMP和Trie的结合,主要处理多模板串匹配问题.以下推荐一个博客,有助于学习AC自己主动机. NOTONLYSUCCESS 这里另一个Kuangbin开的比赛,大家 ...
- POJ 2778 DNA Sequence (AC自己主动机 + dp)
DNA Sequence 题意:DNA的序列由ACTG四个字母组成,如今给定m个不可行的序列.问随机构成的长度为n的序列中.有多少种序列是可行的(仅仅要包括一个不可行序列便不可行).个数非常大.对10 ...
随机推荐
- P2756 网络流解决二分图最大匹配
P2756 飞行员配对方案问题 题目背景 第二次世界大战时期.. 题目描述 P2756 飞行员配对方案问题 英国皇家空军从沦陷国征募了大量外籍飞行员.由皇家空军派出的每一架飞机都需要配备在航行技能和语 ...
- 文本三剑客之awk
awk和流编辑器sed在工作原理和用法上有很多类似之处,它们都是检查输入数据中的行是否匹配指定的模式,如果匹配成功就对匹配的行执行相应的操作,重复这个过程直到所有的输入数据都被处理完,因此awk和se ...
- Nginx配置ThinkPHP和Laravel虚拟主机
ThinkPHP server { listen 443 ssl; server_name abc.com; root /var/www/abc; ssl on; ssl_certificate /e ...
- Spring Boot 默认配置无法访问静态资源
问题:将资源放在resources/static目录下,Spring boot不能加载 解决:在启动文件中,添加如下红字部分. @SpringBootApplication @Configuratio ...
- Druid配置
spring-mybatis.xml <!-- 定义数据源Bean --> <!-- Druid --> <bean id="dataSource" ...
- [AI开发]基于DeepStream的视频结构化解决方案
视频结构化的定义 利用深度学习技术实时分析视频中有价值的内容,并输出结构化数据.相比数据库中每条结构化数据记录,视频.图片.音频等属于非结构化数据,计算机程序不能直接识别非结构化数据,因此需要先将这些 ...
- XV6环境搭建及注意事项
Ubuntu16.04SLT 64位 工具链 sudo apt-get install gcc-multilib libsdl1.2-dev, libtool-bin, libglib2.0-dev, ...
- CodeForces 21 A+B
Jabber ID 判断邮箱地址格式是否正确..一把心酸泪...跪11+,,看后台才过.. 注 ...
- BGP路由属性详解
Weight属性:cisco私有的BGP属性参数,它只适用于一台路由器中的路由,也就是不会传递给任何其他的路由器.他的取值范围为<0-65535>,这个数越大优先级越高,默认从邻居学到的路 ...
- 一篇文章告诉你,TLS 1.3 如何用性能为 HTTPS 正名
序•魔戒再现 几天前,OpenSSL 官方宣布即将发布的新版本 (OpenSSL 1.1.1) 将会提供 TLS 1.3 的支持,而且还会和之前的 1.1.0 版本完全兼容,这当然是个好消息. ...