[题目链接]

https://www.lydsy.com/JudgeOnline/problem.php?id=4327

[算法]

AC自动机
[代码]

#include<bits/stdc++.h>
using namespace std;
const int MAXN = 1e7 + ;
const int MAXM = 1e5 + ;
const int MAXLEN = ; int n,m;
int ans[MAXM];
char P[MAXN];
char s[MAXM][MAXLEN]; inline int get_value(char a)
{
if (a == 'E') return ;
if (a == 'S') return ;
if (a == 'W') return ;
if (a == 'N') return ;
}
struct AC_Automation
{
int tot;
int root;
struct Node
{
int child[];
int fail;
bool visited;
} trie[MAXN];
inline void insert(char *s)
{
int now = root;
int len = strlen(s + );
for (int i = ; i <= len; i++)
{
int val = get_value(s[i]);
if (!trie[now].child[val]) trie[now].child[val] = ++tot;
now = trie[now].child[val];
}
}
inline void rebuild()
{
int l,r;
static int q[MAXN];
q[l = r = ] = root;
trie[root].fail = -;
while (l <= r)
{
int cur = q[l];
l++;
for (int i = ; i < ; i++)
{
if (trie[cur].child[i])
{
if (cur == root)
trie[trie[cur].child[i]].fail = ;
else
{
int p = trie[cur].fail;
while (p != -)
{
if (trie[p].child[i])
{
trie[trie[cur].child[i]].fail = trie[p].child[i];
break;
} else p = trie[p].fail;
}
}
q[++r] = trie[cur].child[i];
}
}
}
}
inline void getans(char *s)
{
int now = root;
int len = strlen(s + );
for (int i = ; i <= len; i++)
{
int val = get_value(s[i]);
int p = now;
while (p != -)
{
if (trie[p].child[val]) break;
else p = trie[p].fail;
}
if (p == -)
{
now = ;
continue;
} else now = p = trie[p].child[val];
while (p)
{
if (!trie[p].visited)
{
trie[p].visited = true;
p = trie[p].fail;
} else break;
}
}
}
inline void calc(int pos,char *s)
{
int now = root;
int len = strlen(s + );
for (int i = ; i <= len; i++)
{
int val = get_value(s[i]);
now = trie[now].child[val];
if (trie[now].visited) ans[pos] = i;
}
}
} ACAM; int main()
{ scanf("%d%d",&n,&m);
scanf("%s",P + );
for (int i = ; i <= m; i++) scanf("%s",s[i] + );
for (int i = ; i <= m; i++) ACAM.insert(s[i]);
ACAM.rebuild();
ACAM.getans(P);
for (int i = ; i <= m; i++) ACAM.calc(i,s[i]);
for (int i = ; i <= m; i++) printf("%d\n",ans[i]); return ; }

[JSOI 2012] 玄武密码的更多相关文章

  1. Vijos P1951 玄武密码 (AC自动机)

    描述 在美丽的玄武湖畔,鸡鸣寺边,鸡笼山前,有一块富饶而秀美的土地,人们唤作进香河.相传一日,一缕紫气从天而至,只一瞬间便消失在了进香河中.老人们说,这是玄武神灵将天书藏匿在此. 很多年后,人们终于在 ...

  2. 【BZOJ4327】JSOI2012 玄武密码 AC自动机

    [BZOJ4327]JSOI2012 玄武密码 Description 在美丽的玄武湖畔,鸡鸣寺边,鸡笼山前,有一块富饶而秀美的土地,人们唤作进香河.相传一日,一缕紫气从天而至,只一瞬间便消失在了进香 ...

  3. 4327: JSOI2012 玄武密码

    4327: JSOI2012 玄武密码 Description 在美丽的玄武湖畔,鸡鸣寺边,鸡笼山前,有一块富饶而秀美的土地,人们唤作进香河.相传一日,一缕紫气从天而至,只一瞬间便消失在了进香河中.老 ...

  4. BZOJ4327:[JSOI2012]玄武密码(SAM)

    Description 在美丽的玄武湖畔,鸡鸣寺边,鸡笼山前,有一块富饶而秀美的土地,人们唤作进香河.相传一日,一缕紫气从天而至,只一瞬间便消失在了进香河中.老人们说,这是玄武神灵将天书藏匿在此.  ...

  5. 4327: JSOI2012 玄武密码[SAM]

    4327: JSOI2012 玄武密码 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 263  Solved: 112[Submit][Status] ...

  6. P5231 [JSOI2012]玄武密码

    P5231 [JSOI2012]玄武密码 链接 分析: 首先对所有询问串建立AC自动机,然后扫描一遍母串,在AC自动机上走,没走到一个点,标记这个点走过了,并且它的fail树上的祖先节点也可以访问到( ...

  7. BZOJ4327 [JSOI2012] 玄武密码 [AC自动机]

    题目传送门 玄武密码 Description 在美丽的玄武湖畔,鸡鸣寺边,鸡笼山前,有一块富饶而秀美的土地,人们唤作进香河.相传一日,一缕紫气从天而至,只一瞬间便消失在了进香河中.老人们说,这是玄武神 ...

  8. BZOJ-4327:JSOI2012 玄武密码(AC自动机模板题)

    在美丽的玄武湖畔,鸡鸣寺边,鸡笼山前,有一块富饶而秀美的土地,人们唤作进香河.相传一日,一缕紫气从天而至,只一瞬间便消失在了进香河中.老人们说,这是玄武神灵将天书藏匿在此.  很多年后,人们终于在进香 ...

  9. [BZOJ4327]:[JZOI2012]玄武密码(AC自动机)

    题目传送门 题目描述: 在美丽的玄武湖畔,鸡鸣寺边,鸡笼山前,有一块富饶而秀美的土地,人们唤作进香河.相传一日,一缕紫气从天而至,只一瞬间便消失在了进香河中.老人们说,这是玄武神灵将天书藏匿在此.  ...

随机推荐

  1. 【6.24校内test】T1 江城唱晚

    [题目背景] 墙角那株海棠,是你种下的思念. 生死不能忘,高烛照容颜. 一曲江城唱晚,重忆当年坐灯前, 青衫中绣着你留下的线. ——银临<江城唱晚> [问题描述] 扶苏是个喜欢一边听古风歌 ...

  2. 如何同步iframe与嵌入内容的高度

    最近频繁的做一些通过iframe在a页面嵌入b页面需求.总结下来,有以下问题需要解决 1.如何同步iframe与嵌入内容的高度 2.将b页面载入到a页面后,如何隐藏掉b页面上的元素,如左导航,顶部导航 ...

  3. 洛谷——P1073 最优贸易

    P1073 最优贸易 n 个城市间以 m 条有向道路连接, 小 T 从 1 号城市出发, 将要去往 n 号城市.小 T 观察到一款商品 Z 在不同的城市的价格可能不尽相同,小 T 想要在旅行中的某一个 ...

  4. Luogu P3797 妖梦斩木棒

    解题思路 用线段树做这个就不用说了吧,但是要维护的东西确实很神奇.在每一个节点上都维护一个$lbkt$,表示这个区间上最靠左的右括号的位置:一个$rbkt$,表示这个区间上最靠右的左括号的位置.还有一 ...

  5. 爬虫之BeautifulSoup库

    文档:https://beautifulsoup.readthedocs.io/zh_CN/latest/ 一.开始 解析库 # 安装解析库 pip3 install lxml pip3 instal ...

  6. man中文手册安装

    转载自 https://www.cnblogs.com/fyc119/p/7116295.html man中文手册安装 下载源码 wget https://src.fedoraproject.org/ ...

  7. PHP代码静态分析工具PHPStan

    最近发现自己写的PHP代码运行结果总跟自己预想的不一样,排查时发现大多是语法错误,在运行之前错误已经种下.可能是自己粗心大意,或者说php -l检测太简单,不过的确是有一些语法错误埋藏得太深(毕竟PH ...

  8. BNUOJ 2528 Mayor's posters

    Mayor's posters Time Limit: 3000ms Memory Limit: 131072KB This problem will be judged on UVA. Origin ...

  9. MaxScale初探

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://mrcto.blog.51cto.com/1923168/1437287 内容预览 ...

  10. JVM即时编译(JIT)

    Java解释执行过程: 代码装入-代码校验-代码执行 Java字节码的执行方式分为两种:即使编译方式和解释执行方式.即时编译是值解释器先将字节码编译成机器码,然后执行该机器码.解释执行的方式是指解释器 ...