Description
在美丽的玄武湖畔,鸡鸣寺边,鸡笼山前,有一块富饶而秀美的土地,人们唤作进香河。相传一日,一缕紫气从天而至,只一瞬间便消失在了进香河中。老人们说,这是玄武神灵将天书藏匿在此。
很多年后,人们终于在进香河地区发现了带有玄武密码的文字。更加神奇的是,这份带有玄武密码的文字,与玄武湖南岸台城的结构有微妙的关联。于是,漫长的破译工作开始了。
经过分析,我们可以用东南西北四个方向来描述台城城砖的摆放,不妨用一个长度为N的序列来描述,序列中的元素分别是‘E’,‘S’,‘W’,‘N’,代表了东南西北四向,我们称之为母串。而神秘的玄武密码是由四象的图案描述而成的M段文字。这里的四象,分别是东之青龙,西之白虎,南之朱雀,北之玄武,对东南西北四向相对应。
现在,考古工作者遇到了一个难题。对于每一段文字,其前缀在母串上的最大匹配长度是多少呢?

Input
第一行有两个整数,N和M,分别表示母串的长度和文字段的个数。
第二行是一个长度为N的字符串,所有字符都满足是E,S,W和N中的一个。
之后M行,每行有一个字符串,描述了一段带有玄武密码的文字。依然满足,所有字符都满足是E,S,W和N中的一个。

Output
输出有M行,对应M段文字。
每一行输出一个数,表示这一段文字的前缀与母串的最大匹配串长度。

Sample Input
7 3

SNNSSNS

NNSS

NNN

WSEE
Sample Output
4

2

0
HINT

对于100%的数据,N<=10^7,M<=10^5,每一段文字的长度<=100。

应上传者要求,此题不公开,如有异议,请提出.


SAM模板题。
注意开两倍空间。

#include <bits/stdc++.h>
#define N 10000010
#define M 110
using namespace std;
int n,m,to[M];
char s[N],z[M];
struct node{node *ch[4],*fail;int dep;
}t[N<<1],*root=t,*tail=t;node *newnode(){(++tail)->fail=t;tail->ch[0]=tail->ch[1]=tail->ch[2]=tail->ch[3]=t;return tail;
}node* add(node *p,int c){node *cur=newnode(),*q=t,*f;cur->dep=p->dep+1;for (node *i=p;i!=t;i=i->fail){if (i->ch[c]!=t){f=i; q=i->ch[c];break;}i->ch[c]=cur;}if (q==t){cur->fail=root;return cur;}if (q->dep==f->dep+1)cur->fail=q;else{node *nq=newnode();nq->dep=f->dep+1;nq->fail=q->fail;cur->fail=q->fail=nq;for (node *i=f;i!=t && i->ch[c]==q;i=i->fail)i->ch[c]=nq;for (int i=0;i<4;i++)nq->ch[i]=q->ch[i];}return cur;
}void build(){(root=newnode())->dep=0;to['E']=0,to['S']=1,to['W']=2,to['N']=3;node *las=root;for (int i=0;i<n;i++)las=add(las,to[s[i]]);
}int main(){scanf("%d%d",&n,&m);scanf(" %s",s);build();int len,ans; node *cur;for (int i=1;i<=m;i++){scanf(" %s",z);ans=0,len=strlen(z);cur=root;for (int j=0;j<len;ans++,j++){cur=cur->ch[to[z[j]]];if (cur==t) break;}printf("%d\n",ans);}return 0;
}

[BZOJ4327] JSOI2012玄武密码相关推荐

  1. bzoj4327: JSOI2012 玄武密码 AC自动机

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

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

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

  3. BZOJ4327 : JSOI2012 玄武密码

    对所有询问串建立AC自动机. 然后将母串在AC自动机上跑,每走到一个点x,从x点出发沿着fail指针能到的所有前缀都是匹配成功的,暴力向上走,碰到走过的就break,这样每个点最多只会被标记一次. 时 ...

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

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

  5. P5231 [JSOI2012]玄武密码(SAM 经典运用)

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

  6. [FROM WOJ]#3744 JSOI2012 玄武密码

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

  7. 【bzoj4327】JSOI2012 玄武密码 AC自动机

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

  8. 【BZOJ4327】[JSOI2012] 玄武密码(AC自动机的小应用)

    点此看题面 大致题意: 给你一个长度为lenlenlen的文本串和nnn个模式串,让你求出每一个模式串的前缀与文本串的最大匹配串长度(其中模式串和文本串都只由字符'E','S','W','N'组成). ...

  9. BZOJ 4327 [JSOI2012]玄武密码 (AC自动机)

    题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=4327 题解: 做法挺显然,建出AC自动机之后在上面跑,标记所有走过的点,然后再进行递推 ...

最新文章

  1. 【JAVA进阶】——myEclipse连接mysql启动数据库服务
  2. 图的广度优先搜索(bfs)以及深度优先搜索(dfs)
  3. eureka-7-多网卡下的ip选择
  4. 华科05年计算机考研复试机试
  5. C# continue,break,return 跳转语句的用法
  6. c4d导出obj格式有破面_适合折腾MMD的C4D常用插件及本体合集
  7. Sun公司开源游戏服务器Project Darkstar Server——(Sun game server , 简称 sgs)学习笔记(二):多人游戏...
  8. 如何高效学习Oracle
  9. 装修好的房子多久能住 入住需要注意什么?
  10. 关于集合和字符串的互转
  11. 交通灯keil程序加2位数码管_十字路口交通灯控制Keil编写
  12. 禾川伺服驱动器X2E-750调试记录
  13. java经典算法50题_JAVA经典算法50题
  14. 【Python 多进制转换】——数值多进制转换bin、oct、int、hex(2进制、4进制、8进制、10进制、16进制、32进制)
  15. Life's A Struggle
  16. 生成对抗网络发展及其主要工程应用综述
  17. 暴走英雄坛服务器维护,《暴走英雄坛》4月29日更新公告
  18. 有趣的黑掉卫星Hack-A-Sat CTF比赛——模拟卫星视角beckley
  19. 【C语言】交换函数(swap)
  20. Android图片压缩详解

热门文章

  1. QQ安装教程 2 -for wuqs
  2. Linux——磁盘Part 4:磁盘阵列(raid0、raid1、raid5、raid6、raid1+0)
  3. Android 利用MediaPlayer实现音乐播放
  4. 开源php商城系统选择
  5. 区块链学习名词详解-Part1
  6. 使用three.js/webgl开发智慧城市场景的一些总结
  7. bzoj1615 【Usaco2008 Mar】The Loathsome Hay Baler 麻烦的干草打包机
  8. lumia 830 android,微软Lumia 830成功刷入Android 5.0系统
  9. KISSY基础篇乄KISSY之IO前奏
  10. 几款超好用的PDF转换软件推荐