【题解】bzoj 4327 JSOI2012 玄武密码】的更多相关文章

Code: #include<bits/stdc++.h> #define setIO(s) freopen(s".in","r",stdin) #define maxn 18000001 using namespace std; char str[maxn]; int idx(char i) { if(i=='S') return 0; if(i=='N') return 1; if(i=='W') return 2; if(i=='E') retur…
原题传送门 我们先对所有询问串建立AC自动机(今天洛咕上有人分不清AC自动机和自动AC机) 然后将母串在AC自动机上跑,每走到一个点x,从x点出发沿着fail指针所能到的所有前缀都是匹配成功的,暴力向上走,碰到走过的就break(剩下的肯定都走过),这样每个点最多被标记1次 最后再把每个询问串走一遍统计答案 时间复杂度为\(O(N+100M)\) #include <bits/stdc++.h> #define N 10000005 #define M 105 #define K 100005…
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=4327 [题目大意] 求每个子串在母串中的最长匹配 [题解] 对母串建立后缀自动机,用每个子串在上面匹配即可. [代码] #include <cstdio> #include <cstring> #include <algorithm> #include <vector> using namespace std; const int N=20000…
题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=4327 题解: 做法挺显然,建出AC自动机之后在上面跑,标记所有走过的点,然后再进行递推,如果\(fail[x]\)被标记则\(x\)被标记,然后每一个关键点往上找即可 有一个常数优化的技巧: 如果枚举每个\(x\)再vis[fail[x]]|=vis[x]的话好像还需要按深度排序,不如直接每到一个点直接不停地跳fail一路标记,直到遇到已标记点为止 代码 #include<cstdi…
听说这题不公开.. 那就不贴题意了 一眼看上去还以为是exkmp的裸题.. 看了数据范围,呵呵.. 多串匹配嘛.. 就用AC自动机咯,而且每个点最多也就只有$4$个孩子 用原串在AC自动机上走,碰到的和fail到的都是可以到达的字符串,每个点标记记录一下,这个时间复杂度是$O(n)$的 然后再每个串走AC自动机,找到最远的被标记的点就是答案了.. #include <cstdio> #include <cstring> #include <cstdlib> #inclu…
4327: JSOI2012 玄武密码 Description 在美丽的玄武湖畔,鸡鸣寺边,鸡笼山前,有一块富饶而秀美的土地,人们唤作进香河.相传一日,一缕紫气从天而至,只一瞬间便消失在了进香河中.老人们说,这是玄武神灵将天书藏匿在此.  很多年后,人们终于在进香河地区发现了带有玄武密码的文字.更加神奇的是,这份带有玄武密码的文字,与玄武湖南岸台城的结构有微妙的关联.于是,漫长的破译工作开始了.  经过分析,我们可以用东南西北四个方向来描述台城城砖的摆放,不妨用一个长度为N的序列来描述,序列中的…
4327: JSOI2012 玄武密码 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 263  Solved: 112[Submit][Status][Discuss] Description 在美丽的玄武湖畔,鸡鸣寺边,鸡笼山前,有一块富饶而秀美的土地,人们唤作进香河.相传一日,一缕紫气从天而至,只一瞬间便消失在了进香河中.老人们说,这是玄武神灵将天书藏匿在此.  很多年后,人们终于在进香河地区发现了带有玄武密码的文字.更加神奇的是,这份带有玄…
[BZOJ4327]JSOI2012 玄武密码 Description 在美丽的玄武湖畔,鸡鸣寺边,鸡笼山前,有一块富饶而秀美的土地,人们唤作进香河.相传一日,一缕紫气从天而至,只一瞬间便消失在了进香河中.老人们说,这是玄武神灵将天书藏匿在此.  很多年后,人们终于在进香河地区发现了带有玄武密码的文字.更加神奇的是,这份带有玄武密码的文字,与玄武湖南岸台城的结构有微妙的关联.于是,漫长的破译工作开始了.  经过分析,我们可以用东南西北四个方向来描述台城城砖的摆放,不妨用一个长度为N的序列来描述,…
P5231 [JSOI2012]玄武密码 链接 分析: 首先对所有询问串建立AC自动机,然后扫描一遍母串,在AC自动机上走,没走到一个点,标记这个点走过了,并且它的fail树上的祖先节点也可以访问到(即可以匹配到主串),于是沿着fail树打标记,当到一个已经打过标记的点的时候,退出.这样保证每个点只会被打标机一次.询问时,在AC自动机上倒着往前走,走到第一个打过标记的点的时候,从AC自动机的根节点到这个点的距离就是答案.复杂度$O(N+100M)$. 代码: #include<cstdio>…
2021.11.10 P5231 [JSOI2012]玄武密码(AC自动机) https://www.luogu.com.cn/problem/P5231 题意: 给出字符串S和若干T,求S与每个T的最长公共前缀. 分析: 建AC自动机之后对于S每个出现的位置i以及fail[t[u][i]]打上标记,继续寻找i=fail[i]直到i>0,然后对每个T单独寻找,从0到strlen(T)-1如果有标记,更新ans. 代码如下: #include<cstdio> #include<ios…