4327: JSOI2012 玄武密码[SAM]
4327: JSOI2012 玄武密码
Time Limit: 10 Sec Memory Limit: 512 MB
Submit: 263 Solved: 112
[Submit][Status][Discuss]
Description
Input
Output
Sample Input
SNNSSNS
NNSS
NNN
WSEE
Sample Output
2
0
HINT
对于100%的数据,N<=10^7,M<=10^5,每一段文字的长度<=100。
应上传者要求,此题不公开,如有异议,请提出.
Source
给一个字符串 S,给一些字符串 si,求每个 si的最长的在 S 中出现过的前缀的长度。
对 S 建立 SAM,将每个 si 放在 SAM 上运行即可。
#include<ctime>
#include<map>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define OPT __attribute__((optimize("O2")))
using namespace std;
int n,m;
struct S{
int p,q,np,nq;
int last,cnt;int len;
static const int N=2e7;
int fa[N],l[N],a[N][];char ch[(N>>)+];
S(){last=++cnt;}
OPT inline int get(char &c){
return c=='N'?:
c=='S'?:
c=='W'?:
;
}
OPT inline void extend(int c){
p=last;np=last=++cnt;l[np]=l[p]+;
while(!a[p][c]&&p) a[p][c]=np,p=fa[p];
if(!p) fa[np]=;
else{
q=a[p][c];
if(l[p]+==l[q]) fa[np]=q;
else{
nq=++cnt;l[nq]=l[p]+;
memcpy(a[nq],a[q],sizeof a[q]);
fa[nq]=fa[q];
fa[np]=fa[q]=nq;
while(a[p][c]==q) a[p][c]=nq,p=fa[p];
}
}
}
OPT inline void build(){
scanf("%s",ch);//len=strlen(ch);
for(int i=;i<len;i++) extend(get(ch[i]));
}
OPT inline void solve(){
int ans=;
scanf("%s",ch);len=strlen(ch);
for(int i=,p=;i<len;i++){
if(a[p][get(ch[i])]){
p=a[p][get(ch[i])];
ans++;
}
else break;
}
printf("%d\n",ans);
}
}sam;
int main(){
scanf("%d%d",&n,&m);sam.len=n;
sam.build();
for(int i=;i<m;i++) sam.solve();
return ;
}
4327: JSOI2012 玄武密码[SAM]的更多相关文章
- 4327: JSOI2012 玄武密码
4327: JSOI2012 玄武密码 Description 在美丽的玄武湖畔,鸡鸣寺边,鸡笼山前,有一块富饶而秀美的土地,人们唤作进香河.相传一日,一缕紫气从天而至,只一瞬间便消失在了进香河中.老 ...
- BZOJ4327:[JSOI2012]玄武密码(SAM)
Description 在美丽的玄武湖畔,鸡鸣寺边,鸡笼山前,有一块富饶而秀美的土地,人们唤作进香河.相传一日,一缕紫气从天而至,只一瞬间便消失在了进香河中.老人们说,这是玄武神灵将天书藏匿在此. ...
- BZOJ 4327: JSOI2012 玄武密码 后缀自动机
Code: #include<bits/stdc++.h> #define setIO(s) freopen(s".in","r",stdin) # ...
- BZOJ 4327 JSOI2012 玄武密码(后缀自动机)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=4327 [题目大意] 求每个子串在母串中的最长匹配 [题解] 对母串建立后缀自动机,用每 ...
- BZOJ 4327 [JSOI2012]玄武密码 (AC自动机)
题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=4327 题解: 做法挺显然,建出AC自动机之后在上面跑,标记所有走过的点,然后再进行递推 ...
- bzoj 4327: JSOI2012 玄武密码
听说这题不公开.. 那就不贴题意了 一眼看上去还以为是exkmp的裸题.. 看了数据范围,呵呵.. 多串匹配嘛.. 就用AC自动机咯,而且每个点最多也就只有$4$个孩子 用原串在AC自动机上走,碰到的 ...
- 【题解】bzoj 4327 JSOI2012 玄武密码
原题传送门 我们先对所有询问串建立AC自动机(今天洛咕上有人分不清AC自动机和自动AC机) 然后将母串在AC自动机上跑,每走到一个点x,从x点出发沿着fail指针所能到的所有前缀都是匹配成功的,暴力向 ...
- 【BZOJ4327】JSOI2012 玄武密码 AC自动机
[BZOJ4327]JSOI2012 玄武密码 Description 在美丽的玄武湖畔,鸡鸣寺边,鸡笼山前,有一块富饶而秀美的土地,人们唤作进香河.相传一日,一缕紫气从天而至,只一瞬间便消失在了进香 ...
- P5231 [JSOI2012]玄武密码
P5231 [JSOI2012]玄武密码 链接 分析: 首先对所有询问串建立AC自动机,然后扫描一遍母串,在AC自动机上走,没走到一个点,标记这个点走过了,并且它的fail树上的祖先节点也可以访问到( ...
随机推荐
- Sublime text 3 中Package Control 的安装与使用方法
Package Control插件本身是一个为了方便管理插件的插件,在Sublime text 3中,Package Control 的安装方法一开始出来的方法是要先安装Git, 再输入代码来安装,原 ...
- Loadrunner对https协议(单双向SSL)的web端性能测试
1.项目背景 1.1 单双向SSL的含义及部署 单向SSL即我们说到的https协议. 特点是,浏览器需要请求验证服务器证书: 基本含义是:一个安全通信通道,它基于HTTP开发,用于在客户计算机和服务 ...
- 【NLP】simhash判断文档相似度
http://blog.csdn.net/heiyeshuwu/article/details/44117473
- synchronized关键字的用法总结
synchronized关键字主要有以下这3种用法: 修饰实例方法,作用于当前实例加锁,进入同步代码前要获得当前实例的锁 修饰静态方法,作用于当前类对象加锁,进入同步代码前要获得当前类对象的锁 修饰代 ...
- redis 的set数据类型
相关命令 1.SADD SADD key-name item1 [item 2…] 将一个或多个成员元素加入到集合中 2.SREM SMEMBERS key-name item1 [item 2…] ...
- 二维码解析:使用 JavaScript 库reqrcode.js解析二维码
上次使用QRCode.js可以来生成二维码,但是我没有找到有文档说明可以对存在的二维码进行扫描解析其中的内容. 幸亏查找到了可行的解决方案,而且很好使哦!就是reqrcode.js 地址:https: ...
- Linux中/etc/resolv.conf文件简析
https://blog.csdn.net/lcr_happy/article/details/54867510
- python内存泄漏,python垃圾手动回收,1
部署的舆情系统,内存变大,找原因. 一个小例子. def func(): local_list = list(range(10000000)) func() time.sleep(200) 能够观察到 ...
- 【jmeter】jmeter 压力测试
1.添加线程组,添加CSV Data set config 设置要读取的文件的路径,内容. 指定文件名称,文件编码,变量名,分割符等. 2.添加HTTP请求,注意参数 3.添加监听信息 模拟高并发 , ...
- backbone学习笔记:模型(Model)(1)基础知识
backbone为复杂Javascript应用程序提供MVC(Model View Controller)框架,框架里最基本的是Model(模型),它用来处理数据,对数据进行验证,完成后台数据与前台数 ...