【BZOJ4327】JSOI2012 玄武密码 AC自动机
【BZOJ4327】JSOI2012 玄武密码
Description
Input
Output
Sample Input
SNNSSNS
NNSS
NNN
WSEE
Sample Output
2
0
HINT
对于100%的数据,N<=10^7,M<=10^5,每一段文字的长度<=100。
题解:沿着AC自动机搜几遍即可。
#include <cstdio>
#include <cstring>
#include <iostream>
#include <queue>
using namespace std;
const int maxn=10000010;
struct node
{int ch[4],fail,cnt,vis,ans,dep;
}p[maxn];
int dic(char le)
{switch(le){case 'E':return 0;case 'S':return 1;case 'W':return 2;case 'N':return 3;}
}
int n,m,tot;
int Q[maxn],pos[100010];
char w[110],str[maxn];
queue<int> q;
void build()
{int i,u,t;q.push(1);while(!q.empty()){u=q.front(),q.pop();Q[++Q[0]]=u;for(i=0;i<4;i++){if(p[u].ch[i]){q.push(p[u].ch[i]);t=p[u].fail;while(!p[t].ch[i]&&t) t=p[t].fail;if(t) p[p[u].ch[i]].fail=p[t].ch[i];else p[p[u].ch[i]].fail=1;}}}
}
void search()
{int i,j,u=1,t;p[u].vis=0;for(i=0;i<n;i++){while(!p[u].ch[dic(str[i])]&&u) u=p[u].fail;u=p[u].ch[dic(str[i])];u=u>0?u:1;p[u].vis=1;}for(i=tot;i>=2;i--) p[p[Q[i]].fail].vis|=p[Q[i]].vis;for(i=1;i<=tot;i++){if(p[Q[i]].vis) p[Q[i]].ans=p[Q[i]].dep;for(j=0;j<4;j++)if(p[Q[i]].ch[j])p[p[Q[i]].ch[j]].ans=p[Q[i]].ans;}for(i=1;i<=m;i++) printf("%d\n",p[pos[i]].ans);
}
int main()
{scanf("%d%d%s",&n,&m,str);int i,j,k,u,t;tot=1;for(i=1;i<=m;i++){scanf("%s",w);k=strlen(w);u=1;for(j=0;j<k;j++){if(!p[u].ch[dic(w[j])]) p[u].ch[dic(w[j])]=++tot;u=p[u].ch[dic(w[j])];p[u].dep=j+1;}p[u].cnt++;pos[i]=u;}build();search();return 0;
}
转载于:https://www.cnblogs.com/CQzhangyu/p/6265079.html
【BZOJ4327】JSOI2012 玄武密码 AC自动机相关推荐
- bzoj4327: JSOI2012 玄武密码 AC自动机
bzoj4327: JSOI2012 玄武密码 Description 在美丽的玄武湖畔,鸡鸣寺边,鸡笼山前,有一块富饶而秀美的土地,人们唤作进香河.相传一日,一缕紫气从天而至,只一瞬间便消失在了进香 ...
- 【bzoj4327】JSOI2012 玄武密码 AC自动机
题目描述 在美丽的玄武湖畔,鸡鸣寺边,鸡笼山前,有一块富饶而秀美的土地,人们唤作进香河.相传一日,一缕紫气从天而至,只一瞬间便消失在了进香河中.老人们说,这是玄武神灵将天书藏匿在此. 很多年后,人们 ...
- BZOJ 4327 [JSOI2012]玄武密码 (AC自动机)
题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=4327 题解: 做法挺显然,建出AC自动机之后在上面跑,标记所有走过的点,然后再进行递推 ...
- BZOJ 4327 【JSOI 2012】 玄武密码 AC自动机+dfs
题目描述 在美丽的玄武湖畔,鸡鸣寺边,鸡笼山前,有一块富饶而秀美的土地,人们唤作进香河.相传一日,一缕紫气从天而至,只一瞬间便消失在了进香河中.老人们说,这是玄武神灵将天书藏匿在此. 很多年后,人们 ...
- BZOJ4327 : JSOI2012 玄武密码
对所有询问串建立AC自动机. 然后将母串在AC自动机上跑,每走到一个点x,从x点出发沿着fail指针能到的所有前缀都是匹配成功的,暴力向上走,碰到走过的就break,这样每个点最多只会被标记一次. 时 ...
- BZOJ4327:[JSOI2012]玄武密码(SAM)
Description 在美丽的玄武湖畔,鸡鸣寺边,鸡笼山前,有一块富饶而秀美的土地,人们唤作进香河.相传一日,一缕紫气从天而至,只一瞬间便消失在了进香河中.老人们说,这是玄武神灵将天书藏匿在此. ...
- [BZOJ4327] JSOI2012玄武密码
Description 在美丽的玄武湖畔,鸡鸣寺边,鸡笼山前,有一块富饶而秀美的土地,人们唤作进香河.相传一日,一缕紫气从天而至,只一瞬间便消失在了进香河中.老人们说,这是玄武神灵将天书藏匿在此. 很 ...
- [FROM WOJ]#3744 JSOI2012 玄武密码
#3744 JSOI2012 玄武密码 题面 在美丽的玄武湖畔,鸡鸣寺边,鸡笼山前,有一块富饶而秀美的土地,人们唤作进香河.相传一日,一缕紫气从天而至,只一瞬间便消失在了进香河中.老人们说,这是玄武神 ...
- P5231 [JSOI2012]玄武密码(SAM 经典运用)
[JSOI2012]玄武密码 题目背景 在美丽的玄武湖畔,鸡鸣寺边,鸡笼山前,有一块富饶而秀美的土地,人们唤作进香河.相传一日,一缕紫气从天而至,只一瞬间便消失在了进香河中.老人们说,这是玄武神灵将天 ...
最新文章
- PostgreSQL 电商业务(任意维度商品圈选应用) - json包range数组的命中优化 - 展开+索引优化...
- [推荐] 创业者要留意优先清算权
- http https http2.0
- y电容如何选型_开关电源中电容如何快速选型
- [Data Pump]expdp导出笔记
- 【操作系统】Unix文件类型有哪些
- matlab进化树的下载,mega7.0进化树软件下载-mega 7.0 win 64位下载【附详细使用教程】 - 百当下载站...
- 如何在自带.net4.8的Windows 10系统上装其他版本的.net
- windows之IP地址(一)
- 海洋cms常见问题有哪些?
- 小语种语音情感语料库的建立——论文阅读1
- 五层协议之数据链路层
- 课程笔记《碳中和产业报告》
- PHP等比缩放并补白
- 通过抓包判断是否支持 802.11k and 11r
- 裸辞4个月,面试了30家公司,终于找到了理想的工作
- APP超级签名分发系统 企业签名免签封装微信多开自助分发多合一系统
- pgsql——查询常用
- 关于机器人操作系统(ROS)学习前须知二三
- win10 安装cp2102驱动和查看端口号
热门文章
- 极客日报第 53 期:抖音将代替拼多多成为春晚独家红包合作伙伴;高通正研发 8cx 升级版处理器,对标苹果 M1;DuckDuckGo 日查询量首次突破 1 亿
- 注册hotmail.co .jp后缀的hotmail邮箱
- “大姨吗”创始人柴可:“慢就是快”
- ipad4、ipad3与微信等版本过高的软件不兼容解决办法
- C语言的部分杂碎知识
- windows7 安装哪个版本的vs_门套安装45度拼接VS直角拼接,哪个更好?
- 解决VS2010使用mscomm控件无法接收数据的问题
- 陇原战“疫“2021 复现Re
- 计算机科学领域的任何问题都可以通过增加一个间接的中间层来解决
- offer--刷题之路(持续更新)