【AC自动机】前缀匹配(ybtoj AC自动机-3)

正题

ybtoj AC自动机-3


题目大意

给你一个字符串和若干匹配串,问你匹配串的前缀和字符串的最大匹配


解题思路

先把所有匹配串丢进AC自动机,然后拿字符串去跑

每次只在当前位置存下贡献,然后按bfs的倒叙传递贡献,最后再倒着跑每个匹配串


代码

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define ll long long
#define N 10000010
using namespace std;
int n, w, hd, tl, len, q[N], b[N], d[N], v[N], nx[N], fa[N], to[N][4];
char s[N], ss[N];
int check(char g)
{if (g == 'E') return 0;if (g == 'S') return 1;if (g == 'W') return 2;if (g == 'N') return 3;
}
int insert(char* s)
{int now = 0, n = strlen(s+1);for (int i = 1; i <= n; ++i){int y = check(s[i]);if (!to[now][y]) to[now][y] = ++w;fa[to[now][y]] = now;q[to[now][y]] = q[now] + 1;now = to[now][y];}return now;
}
void bfs()
{for (int i = 0; i < 4; ++i)if (to[0][i]) d[++tl] = to[0][i];while(hd < tl){int h = d[++hd];for (int i = 0; i < 4; ++i)if (!to[h][i]) to[h][i] = to[nx[h]][i];else nx[to[h][i]] = to[nx[h]][i], d[++tl] = to[h][i];}return;
}
void ask(char* s)
{int now = 0;for (int i = 1; i <= len; ++i){int y = check(s[i]);now = to[now][y];b[now] = 1;}return;
}
int find(int x)//倒着跑匹配串
{while(x && !b[x]) x = fa[x];return q[x];
}
int main()
{scanf("%d%d", &len, &n);scanf("%s", ss+1);for (int i = 1; i <= n; ++i){scanf("%s", s+1);v[i] = insert(s);}bfs();ask(ss);for (int i = tl; i > 0; --i)b[nx[d[i]]] |= b[d[i]];//传递贡献for (int i = 1; i <= n; ++i)printf("%d\n", find(v[i]));return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/319663.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Codeforces Global Round 10

这种大场全是神仙打架&#xff0c;向我这种菜菜就是掉分www太难了 神仙打架&#xff0c;百姓遭殃。 A - Omkar and Password 分析可以知道&#xff0c;只要数组元素不是全部相等答案就是1&#xff0c;如何数组元素全部相等答案就是n。 #define IO ios::sync_with_stdio(fals…

【每日一题】7月17日题目精讲—BOWL 碗的叠放

【每日一题】7月17日题目精讲—BOWL 碗的叠放 时间限制&#xff1a;C/C 1秒&#xff0c;其他语言2秒 空间限制&#xff1a;C/C 262144K&#xff0c;其他语言524288K 64bit IO Format: %lld题目描述 小H有n个碗需要放进橱柜&#xff0c;她希望将他们叠起来放置。你知道每个碗都…

基于Ocelot的gRpcHttp网关

什么是gRpcHttp网关通俗的讲就是将gRpc提供的服务以rest api的形式提供出去&#xff0c;不需要再单独的写一个webapi去做这件事。gRpcHttp网关好处减少不必要代码&#xff0c;减少中间层提高通讯效率。以前可能是这样用了gRpc网关后是这样gRpcHttp网关提供哪些功能可以直接加载…

CF917D-Stranger Trees【矩阵树定理,高斯消元】

正题 题目链接:https://www.luogu.com.cn/problem/CF917D 题目大意 给出nnn个点的一棵树&#xff0c;对于每个kkk求有多少个nnn个点的树满足与给出的树恰好有kkk条边重合。 解题思路 矩阵树有一个统计所有树边权和的和用法&#xff0c;就是把变量变成一个形如wx1wx1wx1的多项…

【AC自动机】屏蔽词删除(ybtoj AC自动机-4)

正题 ybtoj AC自动机-4 题目大意 有一个字符串和若干要删除的串&#xff08;不存在包含关系&#xff09;&#xff0c;每次从前往后搜&#xff0c;搜到第一个要删除的串然后删掉&#xff0c;再从0开始搜 问你最后得到的字符串 解题思路 先把所有删除串丢进AC自动机中&#x…

Codeforces Round #665 (Div. 2)

2020/8/21 晚上打完球就22:10了&#xff0c;愣是没报上名&#xff08;cf打不开&#xff0c;然后就做了一下赛后交的过了3个题 A - Distance and Axis 数学题分类讨论一下即可 #define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0) #pragma GCC optimize(2) #inclu…

【每日一题】7月20日题目精讲—着色方案

来源&#xff1a;牛客网&#xff1a; 文章目录题目描述题解&#xff1a;代码&#xff1a;时间限制&#xff1a;C/C 1秒&#xff0c;其他语言2秒 空间限制&#xff1a;C/C 262144K&#xff0c;其他语言524288K 64bit IO Format: %lld题目描述 有n个木块排成一行&#xff0c;从左…

COSCon'18 面向全宇宙招募志愿者啦!

2018 中国开源年会&#xff08;COSCon18-China Open Source Conference 2018) 志愿者招募工作今日正式启动&#xff01;我们诚挚地欢迎开源社区的朋友们及高校的同学们加入志愿工作者团队&#xff0c;与国内外众多开源项目基金会、公司、大神等齐聚一堂&#xff0c;共襄盛举。招…

CF346E-Doodle Jump【类欧】

正题 题目链接:https://www.luogu.com.cn/problem/CF346E 题目大意 给出a,n,p,ha,n,p,ha,n,p,h&#xff0c;在每个ax%p(x∈[0,n])ax\%p(x\in[0,n])ax%p(x∈[0,n])的位置有一个关键点&#xff0c;询问是否所有相邻关键点之间的距离都不超过hhh。 解题思路 没怎么写过类欧&…

【AC自动机】病毒代码(ybtoj AC自动机-5)

正题 ybtoj AC自动机-5 题目大意 给出若干段01串&#xff0c;问你是否存在一个无限的01串&#xff0c;使得串中不存在给出的01串 解题思路 可以把给出01串用AC自动机处理&#xff0c;然后对每个01串的最后一位打上标记 根据AC自动机的连边性质&#xff08;即若无该边&#…

AtCoder Beginner Contest 176总结

由于打球又鸽了一场&#xff0c;快开学了好好打球&#xff01;&#xff01;&#xff01;&#xff08;狗头 还是补一补 A - Takoyaki 签到题 #define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0) #pragma GCC optimize(2) #include<iostream> #include<a…

讲重点,看趋势——Microsoft Ignite 2018的回顾和展望

一年一度的微软技术大会——Microsoft Ignite 2018上周在奥兰多召开&#xff0c;目前已经落下帷幕。我没有去现场&#xff0c;但据说这次的盛况空前&#xff0c;创下微软之最。确实&#xff0c;这些年来&#xff0c;微软内部非常重视 Iginte&#xff0c;上至最高管理层&#xf…

P4590-[TJOI2018]游园会【dp套dp】

正题 题目链接:https://www.luogu.com.cn/problem/P4590 题目大意 给出一个长度为mmm的字符串sss。 对于每个k∈[0,m]k\in[0,m]k∈[0,m]求有多少个长度为nnn的字符串满足与sss的最长公共子序列长度为kkk且不包含NOINOINOI这一个子串。 可用字符集是{N,O,I}\{N,O,I\}{N,O,I} 解…

【DP】【线段树】基站选址(luogu 2605/金牌导航 数据结构优化DP-2)

正题 luogu 2605 金牌导航 数据结构优化DP-2 题目大意 有若干个村庄在一条直线上&#xff0c;距离第一个村庄did_idi​&#xff0c;在该村庄建立基站要花费cic_ici​&#xff0c;如果在离该村不大于sis_isi​的范围内有一个基站&#xff0c;那么该村会被信号覆盖&#xff0c;…

Fake Maxpooling(2020多校第二场F)

Fake Maxpooling&#xff08;2020多校第二场F&#xff09; 文章目录题意&#xff1a;题解&#xff1a;代码&#xff1a;题意&#xff1a; 一个n * m的矩阵&#xff0c;第i行第j列的值是lcm&#xff08;i&#xff0c;j&#xff09;&#xff0c;然后给定一个 k * k的子矩阵&…

Educational Codeforces Round 94 (Rated for Div. 2)

这次做了ABCD&#xff0c;今天下午就要上学去了溜了溜了&#xff0c;早上起来补的题解。 A - String Similarity 分析可知可构造w[i]s[2*i]即可满足题意 #define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0) #pragma GCC optimize(2) #include<string> #in…

算法工程师的危机

本文为沙漠之鹰第68篇原创文章9月20号讯飞AI同传语音造假的新闻刷爆科技圈&#xff0c;科大讯飞股价应声下跌3.89%&#xff08;不是65.3%&#xff0c;标题党文章害死人&#xff09;。 吃瓜群众纷纷感慨&#xff0c;有多少人工&#xff0c;就有多少智能。小编偷换概念玩的溜AI概…

Cover the Tree(2020多校第二场C)

Cover the Tree 文章目录题意&#xff1a;题解&#xff1a;代码题意&#xff1a; 一个无向树&#xff0c;选择最少数量的链子&#xff0c;能将树上所有边覆盖&#xff0c;答案不唯一 (1≤n≤2105&#xff09; 链子就是两点之间的边 看看样例 输入 5 1 2 1 3 2 4 2 5输出 2 2…

【DP】【树状数组】折线统计(金牌导航 数据结构优化DP-1)

正题 金牌导航 数据结构优化DP-1 题目大意 平面上有n个点&#xff0c;让你选择若干点&#xff0c;连接x坐标相邻的点&#xff0c;其中连续上升或下降的为一段&#xff0c;问你有多少中选择方案&#xff0c;使得段数为k 解题思路 设fi,j,0/1f_{i,j,0/1}fi,j,0/1​为到第i个点…

AtCoder Beginner Contest 177总结

回学校第一次打AtCoder&#xff0c;感觉晚上在寝室打不在状态~~ A - Don’t be late 数学题签到 #define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0) #include<iostream> #include<algorithm> using namespace std; typedef long long ll; const in…