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\) 那么,考虑一下暴力 在两个串各枚举一 ...
随机推荐
- 我所认识的XPath
实例demo 测试demo所需要xml测试数据 <?xml version="1.0" encoding="iso-8859-1"?> <bo ...
- Java并发基础--线程安全
一.线程安全 1.线程安全的概念 线程安全:某个类被单个线程,或者多个线程同时访问,所表现出来的行为是一致,则可以说这个类是线程安全的. 2.什么情况下会出现线程安全问题 在单线程中不会出现线程安全问 ...
- STL应用——UVA673(堆栈)
分析:栈的应用,遇到右括号便弹出栈顶元素,看是否与右括号相互匹配,其余情况压入栈. 注意:本题有坑,空串空串,为此我跪了数次 #include<iostream> #include< ...
- 软工实践 - 第二十九次作业 Beta 冲刺(7/7)
队名:起床一起肝活队 组长博客:https://www.cnblogs.com/dawnduck/p/10159251.html 作业博客:[班级博客本次作业的链接] (https://edu.cnb ...
- 团队作业4——第一次项目冲刺(Alpha版本)-第一篇
第一次项目冲刺——第一阶段 今天我们在宿舍开了个会,每个人都斗志昂扬的.撸起袖子加油干! 分工讨论 团队成员 任务 郭达 完成博客随笔和leangoo 刘德培 设计好数据库 石浩洋 搭建好LAM ...
- HDU 2139 Calculate the formula
http://acm.hdu.edu.cn/showproblem.php?pid=2139 Problem Description You just need to calculate the su ...
- HDU——1394 Minimum Inversion Number
Problem Description The inversion number of a given number sequence a1, a2, ..., an is the number of ...
- HDU 4776 Ants(Trie+优先队列)
Ants Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 327680/327680 K (Java/Others) Total S ...
- [Leetcode] word ladder 单词阶梯
Given two words (start and end), and a dictionary, find the length of shortest transformation sequen ...
- MySQL之数据库及表的修改和删除
本文章来自实验楼的操作过程和其中相应地解释.(博客园不知道怎么回事,上传图片总是失败.) 一.对数据库修改 1)删除数据库的命令为:DROP DATABASE 数据名; 二.对表的修改 1)重命名一张 ...