博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BZOJ4327:[JSOI2012]玄武密码(SAM)
阅读量:7191 次
发布时间:2019-06-29

本文共 1686 字,大约阅读时间需要 5 分钟。

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。

Solution

$SAM$板子……

Code

1 #include
2 #include
3 #include
4 #define N (20000007) 5 using namespace std; 6 7 int n,m,v[109]; 8 char s[N]; 9 10 struct SAM11 {12 int p,q,np,nq,last,cnt;13 int fa[N],son[N][4],step[N];14 SAM() {last=cnt=1;}15 16 void Insert(int x)17 {18 p=last; np=last=++cnt; step[np]=step[p]+1;19 while (p && !son[p][x]) son[p][x]=np, p=fa[p];20 if (!p) fa[np]=1;21 else22 {23 q=son[p][x];24 if (step[q]==step[p]+1) fa[np]=q;25 else26 {27 nq=++cnt; step[nq]=step[p]+1;28 memcpy(son[nq],son[q],sizeof(son[q]));29 fa[nq]=fa[q]; fa[q]=fa[np]=nq;30 while (son[p][x]==q) son[p][x]=nq, p=fa[p];31 }32 }33 }34 int Query(char s[])35 {36 int len=strlen(s),ans=0,x=1;37 for (int i=0; i

转载于:https://www.cnblogs.com/refun/p/10520725.html

你可能感兴趣的文章
《UNIXLinux程序设计教程》一2.5 文件定位
查看>>
干货满满,阿里天池CIKM2017 Rank4比赛经验分享
查看>>
全闪存不是早买早亏
查看>>
成为更优秀的程序员:退后一步看问题
查看>>
蓝屏死机”再见?Win10 正测试“绿屏”死机
查看>>
外媒称 Android 7.0 当中加入了指纹手势
查看>>
在 GitHub 上,女性提交的代码更可能被接受
查看>>
如何配置struts+hibernate,基本使用方法
查看>>
《OpenStack云计算实战手册(第2版)》一2.7 租户间共享镜像
查看>>
熬夜并不值得程序员炫耀
查看>>
《思科数据中心I/O整合》一2.8 基于优先级的流量控制(PFC)
查看>>
Hadoop 这样业界顶级的大规模数据处理平台,均发现满足不了类似双十一这样全世界的剁手党蜂拥而至的热情...
查看>>
Kilim实现浅析(一)
查看>>
Maven入门指南(二)
查看>>
《万物互联》——2.9 从物联网中盈利
查看>>
《C语言接口与实现:创建可重用软件的技术》一导读
查看>>
Gartner最新发布:2017年十大战略技术趋势
查看>>
《21天学通C语言(第7版)》一2.4 小 结
查看>>
redis集群搭建
查看>>
从微软中国下载Windows系统并安装
查看>>