[题目链接]

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. Spring框架系列(一)--Spring MVC基础知识

    Web项目开发过程中一般都是使用MVC(Model-View-Controller)模式,早先的Struts2到Spring MVC,再到现在Spring Boot,都是相似的思 路.Spring B ...

  2. oracle查询没有主键的表

    select table_name from user_tables a where not exists (select * from user_constraints b where b.cons ...

  3. Leetcode747至少是其他数字两倍的最大数

    Leetcode747至少是其他数字两倍的最大数 在一个给定的数组nums中,总是存在一个最大元素 .查找数组中的最大元素是否至少是数组中每个其他数字的两倍.如果是,则返回最大元素的索引,否则返回-1 ...

  4. Linux常用命令——压缩与解压缩命令

    常用压缩格式:  .zip   .gz   .bz2   .tar.gz   .tar.bz2 1..zip格式压缩 zip 压缩文件名 源文件 压缩文件 zip -r 压缩文件名 源目录 压缩目录 ...

  5. Spring学习开发之路——使用JavaBean代替EJB

    Spring框架是由于软件开发的复杂性而创建的.Spring使用的是基本的JavaBean来完成以前只可能由EJB完成的事情.然而,Spring的用途不仅仅限于服务器端的开发.从简单性.可测试性和松耦 ...

  6. python 配置文件 ConfigParser模块

    ConfigParser模块 用于生成和修改常见配置文档,当前模块的名称在 python 3.x 版本中变更为 configparser. 来看一个好多软件的常见文档格式如下 [DEFAULT] Se ...

  7. 第十节:Web爬虫之数据存储与MySQL8.0数据库安装和数据插入

    用解析器解析出数据之后,接下来就是存储数据了,保存的形式可以多种多样,最简单的形式是直接保存为文本文件,如 TXT.JSON.csv 另外,还可以保存到数据库中,如关系型数据库MySQL ,非关系型数 ...

  8. software collection

    software software Table of Contents 1. Privacy 2. GFW 2.1. google search 2.2. 修改 DNS 服务器 2.2.1. 修改ip ...

  9. SERE0014: Illegal HTML character: decimal 154

    问题:jmeter,生成报告转化成html,报错SERE0014: Illegal HTML character: decimal 154 原因: 某些字符,特别是控制字符#x7F-#x9F ,在XM ...

  10. springcloud(八):熔断器Hystrix

    熔断器 雪崩效应 在微服务架构中通常会有多个服务层调用,基础服务的故障可能会导致级联故障,进而造成整个系统不可用的情况,这种现象被称为服务雪崩效应.服务雪崩效应是一种因“服务提供者”的不可用导致“服务 ...