bzoj 1301 后缀数组
比较裸的后缀数组。
/**************************************************************
Problem:
User: BLADEVIL
Language: Pascal
Result: Accepted
Time: ms
Memory: kb
****************************************************************/ //By BLADEVIL
var
s, str :array[..] of char;
n, m, l :longint;
i :longint;
ws, wv :array[..] of longint;
w :array[..,..] of longint;
r, sa :array[..] of longint; procedure da;
var
i, j, p, k1, k2 :longint;
begin
for i:= to m do ws[i]:=;
for i:= to n do
begin
w[i][]:=r[i];
inc(ws[r[i]]);
end;
for i:= to m do inc(ws[i],ws[i-]);
for i:=n downto do
begin
dec(ws[w[i][]]);
sa[ws[w[i][]]]:=i;
end; j:=; p:=;
k1:=; k2:=;
while p<=n do
begin
p:=; i:=n-j+;
while i<=n do
begin
w[p][k2]:=i;
inc(p);
inc(i);
end;
for i:= to n do
if sa[i]>=j then
begin
w[p][k2]:=sa[i]-j;
inc(p);
end; for i:= to n do wv[i]:=w[w[i][k2]][k1];
for i:= to m do ws[i]:=;
for i:= to n do inc(ws[wv[i]]);
for i:= to m do inc(ws[i],ws[i-]);
for i:=n downto do
begin
dec(ws[wv[i]]);
sa[ws[wv[i]]]:=w[i][k2];
end; k1:=k1 xor ;
k2:=k2 xor ;
p:=;
w[sa[]][k1]:=;
for i:= to n do
begin
if (w[sa[i-]][k2]=w[sa[i]][k2]) and (w[sa[i-]+j][k2]=w[sa[i]+j][k2]) then
w[sa[i]][k1]:=p- else
begin
w[sa[i]][k1]:=p;
inc(p);
end;
end;
j:=j<<; m:=p;
end; end; begin
n:=;
while not eoln do
begin
read(str[n]);
inc(n);
end;
l:=n; dec(n);
s:=str;
for i:=n+ to *n+ do s[i]:=str[i-n-];
n:=*n+;
s[n]:=chr();
for i:= to n do
begin
r[i]:=ord(s[i]);
if r[i]>m then m:=r[i];
end;
da;
for i:= to n do
if sa[i]<l then write(s[sa[i]+l-]);
writeln;
end.
bzoj 1301 后缀数组的更多相关文章
- BZOJ 2882 & 后缀数组的傻逼实现
题意: 一个字符环,求一个开头使字典序最小. SOL: 后缀数组打起来...然后居然卡过...10sec的实现我10936ms...居然卡过??? rank倒三...啦啦啦啦啦.... 改个离散化会不 ...
- bzoj 3172 后缀数组|AC自动机
后缀数组或者AC自动机都可以,模板题. /************************************************************** Problem: 3172 Us ...
- BZOJ 3998 后缀数组
思路: 第一问 建出来后缀数组以后 前缀和一发n-sa[i]-ht[i]+1 二分 第二问 二分判断是带重复的第几 怎么判断呢 找到它 往后扫ht递减sum+=它 跟K判判 注意等于 加 ...
- BZOJ 3796 后缀数组+KMP
思路: 写得我头脑发蒙,,, 旁边还有俩唱歌的 抓狂 (感谢lh大爷查错) 首先 1.w是s1的子串 2.w是s2的子串 这两步很好办啊~ 后缀数组一下O(n)就可以搞 重点是 这个:3.s3不是w的 ...
- BZOJ 3230 后缀数组+ST
思路: 首先我们已经会了后缀数组求本质不同的子串个数 这道题跟那个差不多 首先我们可以知道按字典序排好的每个后缀之前包含多少本质不同的字串 就是sigma(n-sa[i]+1-ht[i]+bi[i-1 ...
- BZOJ 4516 后缀数组+ST+set
写了一半 没了啊啊啊 重新写的 思路: 先不考虑后缀自动机 (我不会啊) 那这道题只能用后缀数组了 先把原串倒一下 后缀->前缀 相当于每回在前面加了一个字母 求不同的子串个数 首先 正常的求子 ...
- BZOJ 4556(后缀数组+主席树求前驱后继+二分||后缀数组+二分+可持久化线段树)
换markdown写了.. 题意: 给你一个1e5的字符串,1e5组询问,求\([l_1,r_1]\)的所有子串与\([l_2,r_2]\)的lcp 思路: 首先可以发现答案是具有单调性的,我们考虑二 ...
- BZOJ 3238 后缀数组+单调栈
单调栈跑两遍求出来 ht[i]为最小值的那段区间 //By SiriusRen #include <cstdio> #include <cstring> #include &l ...
- 【BZOJ4566】找相同字符(后缀数组)
[BZOJ4566]找相同字符(后缀数组) 题面 BZOJ 题解 后缀数组的做法,应该不是很难想 首先看到两个不同的串,当然是接在一起求\(SA,height\) 那么,考虑一下暴力 在两个串各枚举一 ...
随机推荐
- js键盘相关知识总结
一.相应事件 keydown:按下键盘上的任意键都可触发,按着不放则重复触发 keypress:按下键盘上的字符键时触发,按着不放则重复触发 keyup:释放按键时触发 事件顺序:keydown> ...
- vue2.0 $emit $on组件通信
在vue1.0中父子组件通信使用$dispatch 和 $broadcast,但是在vue2.0中$dispatch 和 $broadcast 已经被弃用. 因为基于组件树结构的事件流方式实在是让人难 ...
- python 基础篇 04(列表 元组 常规操作)
本节主要内容:1. 列表2. 列表的增删改查3. 列表的嵌套4. 元组和元组嵌套5. range 一. 列表1.1 列表的介绍列表是python的基础数据类型之一 ,其他编程语言也有类似的数据类型. ...
- 洛谷P2346四子连棋
题目描述 在一个4*4的棋盘上摆放了14颗棋子,其中有7颗白色棋子,7颗黑色棋子,有两个空白地带,任何一颗黑白棋子都可以向上下左右四个方向移动到相邻的空格,这叫行棋一步. 黑白双方交替走棋,任意一方可 ...
- php常见安全问题
XSS攻击原理: XSS又叫CSS (Cross Site Script) ,跨站脚本攻击.它指的是恶意攻击者往Web页面里插入恶意html代码,当用户浏览该页之时,嵌入其中Web里面的html代码会 ...
- [leetcode-651-4 Keys Keyboard]
Imagine you have a special keyboard with the following keys: Key 1: (A): Prints one 'A' on screen. K ...
- (转载)Linux进程间通信
(在学习linux进程通信,看到一篇很好的文章,转载过来,原文地址是http://www.cnblogs.com/linshui91/archive/2010/09/29/1838770.html) ...
- 使用HashOperations操作redis
方法 c参数 s说明 Long delete(H key, Object... hashKeys); H key:集合key Object... hashKeys:key对应hashkey 删除ma ...
- Aspose.Pdf合并PDF文件
使用Aspose.Pdf类库,有很多种方法可以合并PDF文件,这里简单介绍小生见到的几种: Doucment.Pages.Add PdfFileEditor.Append PdfFileEditor. ...
- Mac Java配置JAVA——HOME
命令行中输入: export JAVA_HOME=$(/usr/libexec/java_home)