后缀数组入门题——2323后缀排序

后缀数组详解(基于基数排序) 后缀数组 阅读详情

题目大意:给定一个字符串,输出排名为1到n的后缀的起始位置

思路:按后缀数组的sa的定义,直接输出即可

code:

#include<cstdio>
#include<cstring>
using namespace std;
const int maxl=200000;
int rank[maxl+10],sa[maxl+10],n,sum[maxl+10],trank[maxl+10],tsa[maxl+10];
char s[maxl+10];


void sorts(int j){
memset(sum,0,sizeof(sum));
for (int i=1;i<=n;i++) sum[rank[i+j]]++;
for (int i=1;i<=n;i++) sum[i]+=sum[i-1];
for (int i=n;i>0;i--) tsa[sum[rank[i+j]]--]=i;

memset(sum,0,sizeof(sum));
for (int i=1;i<=n;i++) sum[rank[tsa[i]]]++;
for (int i=1;i<=n;i++) sum[i]+=sum[i-1];
for (int i=n;i>0;i--) sa[sum[rank[tsa[i]]]--]=tsa[i];
}


void getsa(){
for (int i=1;i<=n;i++) trank[i]=s[i];
for (int i=1;i<=n;i++) sum[trank[i]]++;
for (int i=1;i<=255;i++) sum[i]+=sum[i-1];
for (int i=n;i>0;i--) sa[sum[trank[i]]--]=i;
rank[sa[1]]=1;
for (int i=2,p=1;i<=n;i++){
if (trank[sa[i]]!=trank[sa[i-1]]) p++;
rank[sa[i]]=p;
}
for (int j=1;j<=n;j*=2){
sorts(j);
trank[sa[1]]=1;
for (int i=2,p=1;i<=n;i++){
if (rank[sa[i]]!=rank[sa[i-1]]||rank[sa[i-1]+j]!=rank[sa[i]+j]) p++;
trank[sa[i]]=p;
}
memcpy(rank,trank,sizeof(rank));
}
} 


int main(){
scanf("%s",s+1);
n=strlen(s+1);
getsa();
for (int i=1;i<=n;i++)
printf("%d ",sa[i]);
puts("");for (;;);
return 0;
}


K8S 1.28.2 + Calico 3.27.3 保姆级安装避坑指南:解决节点NotReady问题 本文提供了一份详细的Kubernetes 1.28.2与Calico 3.27.3集群部署指南,重点解决节点NotReady这一常见问题。通过版本兼容性分析、精细化环境配置、kubeadm初始化参数详解及Calico Operator部署,手把手指导用户避开网络插件配置陷阱,确保集群从NotReady状态恢复健康并稳定运行。 阅读详情

相关推荐

【tips】在PyCharm中安装opencv图文版详细教程

pip如下图所示,左边的蓝色图标就是终端。点开终端后,键入命令,按下回车后就开始下载了。如果你更喜欢图形化操作,可以在 PyCharm 中直接安装:。点击右上角的 +按钮(添加包)。搜索或,点击。

zhousanguhe的博客 6741

后缀排序

后缀排序 顾名思义,后缀排序是将字符串的后缀子串按照字典序排序的算法。 sa[i]sa[i]sa[i]表示排名为i的后缀的开头位置 rank[i]rank[i]rank[i]表示从i开始的后缀的排名 很显然sa[i]sa[i]sa[i]和rank[i]rank[i]rank[i]是就互逆的(sa[tank[i]]=isa[tank[i]] = isa[tank[i]]=i) 直接找出所有后缀再排序...

weixin_43751631的博客 2683

深入解析FOC电流环PI参数整定:从理论到实践

本文深入解析了FOC(磁场定向控制)中电流环PI参数整定的核心原理与实践方法。文章从永磁同步电机模型出发,详细阐述了基于带宽与零极点对消的工程法及考虑逆变器延迟的二阶系统整定法两种经典策略,并提供了从理论计算到安全上电调试的完整步骤与常见问题解决方案,帮助工程师精准调校电机控制性能。

weixin_29164497的博客 448

后缀数组-后缀排序

后缀数组-一个可以解决多种字符串中字串问题的优秀算法

Mint_hexagram的博客 1196

AutoCAD2016安装破解教程

AutoCAD2016安装破解教程。本人亲自实验,破解成功,有效。以64位为例。 工具/原料   笔记本电脑 AutoCAD2016安装包 AutoCAD2016注册机(xf-adsk2016_x64.exe)链接:http://pan.baidu.com/s/1cAZQA windows7/8/8.1/10-32...

weixin_33804990的博客 1万+

使用 MATLAB/Simulink + Simscape Electrical,构建一个含储能的微电网系统,实现储能系统与并网逆变器的协同控制

摘要:本文基于Simulink平台,详细介绍了微电网中储能系统与并网逆变器的协同控制建模与仿真方法。主要内容包括:1)构建包含光伏、风电、锂电池和双向DC-DC变换器的微电网系统;2)设计并网逆变器的PQ/Vf双模式控制策略;3)实现储能系统与逆变器的协同控制逻辑,包括SOC保护和功率分配;4)通过多种工况仿真验证系统性能。结果表明,该系统能有效维持微电网稳定运行,支持并网/离网无缝切换。文章还探讨了优化方向和应用扩展,为新能源微电网控制提供了实用参考。

xiaoheshang_123的博客 100

利用后缀数组与高度数组求解最长重复子串

通过后缀数组和高度数组的巧妙配合,我们能够高效地解决最长重复子串的求解问题。这种方法相较于暴力解法,在时间复杂度上有了显著的优化,为处理大规模字符串数据提供了可行的解决方案。希望这篇文章能帮助大家更好地理解和运用后缀数组与高度数组在字符串处理中的应用。

m0_57836225的博客 473

innovus:addRepeaterByRule用法

我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧?addRepeaterByRule不管transition/timing violation,只根据约束的length/cap/fanout等等去给net 插buffer。

m0_61544122的博客 1091

poj 3261 Milk Patterns(后缀数组-最长重复子串)

Description Farmer John has noticed that the quality of milk given by his cows varies from day to day. On further investigation, he discovered that although he can't predict the quality of milk fro

SSimpLe_Y的博客 1034

把注释掉的代码删除掉:在 SAP ABAP 团队里打造可回溯、可测试、可演进的代码库

摘要 SAP ABAP项目中常见的"注释掉代码"反模式存在严重隐患:它增加代码噪音,制造虚假安全感,并可能引发安全和合规风险。Clean ABAP指南明确建议删除这类代码,理由包括: 版本控制系统已提供完整历史回溯能力 注释代码会误导开发者,增加理解成本 临时禁用需求应通过Feature Toggle实现 必须保留的参考代码应放入$TMP等隔离区域 团队应建立自动化检查机制,将"删除注释代码"纳入工程规范,确保代码库只表达当前有效的行为逻辑。在AI时代,可以利用工具辅

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 2450

无线充电Qi协议正向通信FSK的解调设计

常见的FSK解调方法是使用频率锁相环(PLL)来跟踪输入信号中的频率变化。PLL根据输入信号的频率变化来生成数字信号,从而实现FSK信号的解调。本文将详细介绍无线充电Qi协议正向通信FSK的解调设计,并提供相应的源代码。在上述示例代码中,我们首先定义了FSK解调的参数,包括采样率、载波频率、每个比特的持续时间和比特判定阈值。最后,通过比较滤波后的信号与比特判定阈值,我们将解调后的数字数据转换为0和1的序列。请注意,上述代码仅为示例,实际的解调设计可能需要根据具体的应用场景和系统要求进行调整和优化。

IunScala的博客 2444

入门-基础-算法第4版

文章目录1、前言2、基础编程模型2.1、Java程序的基本结构2.2、原始数据类型和表达式2.2.1、表达式2.2.2、类型转换2.2.3、其他原始数据类型2.3、语句2.4、数组2.4.1、创建并初始化数组2.4.2、二维数组2.5、方法2.5.1、递归2.6、API2.7、输入输出2.7.1、标准会图库 1、前言 本书研究多种重要而实用的算法;和算法关系最紧密的是数据结构;本书使用java做为编程语言。 基础编程模型:描述和实现算法所用到的语言特性、软件库和操作系统特性总称 数据抽象并定义抽象数据类型

gaogzhen的博客 1514

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Web_PHP_PHP基础知识;

PHP基础知识 2014/12/25 23:23 引言:PHP 是一种创建动态交互性站点的强有力的服务器端脚本语言。PHP 是免费的,并且使用广泛。对于像微软 ASP 这样的竞争者来说,PHP 无疑是另一种高效率的选项。 一、PHP 简介 前言:PHP 脚本在服务器上执行;服务器需支持PHP; 1、什么是 PHP? >PHP 是 "PHP Hypertext Preprocess

cyb专栏 2013

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

后缀排序(后缀数组SA)

根据字符串间的比较方法,就可以发现最朴素的比较方法是从前往后一个个比较,而这可以用倍增法进行优化,从而将比较的时间复杂度从O(n)降到O(㏒。——从第一位开始比较,相同则往后继续比较,不同则哪一个字符串这一位的ASCII码(该位为空则ASCII码为0)更大,其字典序更大。(k ≤ n,n 为字符串长度),比较对象为后缀 x 和后缀 y ,上一轮排序后每个后缀暂时的排名为数组a,则。,仍相同则代表二者的长度为(k*2)的前缀相同,x和y的排名也暂时相同。值得一提的是,在倍增比较的过程中,

tjhd05151434的博客 532

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

用C++实现Faster Suffix Sort(更快的后缀排序)

在划分过程中,利用字符的字典序进行比较,例如对于字符串 “banana”,其后缀数组初始为 [“banana”, “anana”, “nana”, “ana”, “na”, “a”],在排序过程中,先比较第一个字符,将其分为不同的组,然后再对每组内部进行进一步的细分和排序,直到整个后缀数组有序。需要注意的是,这个实现相对简单,对于较长的字符串可能性能不是最优,在实际应用中,可以考虑使用更高级的后缀排序算法,如 SA-IS(Suffix Array Induced Sort)算法,以提高性能。

1235

后缀数组和自动机

后缀数组 算法思路:倍增+基数排序 数组:sa(第i小的后缀的下标),rk(i后缀是第几小)。 时间复杂度:O(nlogn)O(nlogn)O(nlogn) JSOI2007 字符加密(排序循环移动位置) 题意:给出一个串abcde。他有多个循环移动位置:abcde,bcdea,cdeab,…,ebacd。将这些排序。再按从小到大的顺序输出每个串的最后一个字母。 思路:将字串复制为abcdeabcde后计算后缀数组。 #include<bits/stdc++.h> using namespac

Artist's Garden 266

字符串 (5)--- 后缀数组(倍增思想求解)

后缀数组

cai0612123的专栏 1098

【模板】后缀排序

模板题 学习后缀数组的基础就是后缀排序啦 先说一下变量: 最重要的两个sa和rksa和rksa和rk数组: sa[i]表示排名为i的位置sa[i]表示排名为i的位置sa[i]表示排名为i的位置 rk[i]表示位置i的后缀的排名rk[i]表示位置i的后缀的排名rk[i]表示位置i的后缀的排名 sa[rk[i]]=rk[sa[i]]=isa[rk[i]]=rk[sa[i]]=isa[rk[i]]=rk...

继续学吧 1467

UOJ #35 后缀排序(后缀数组)

题目链接 题解:后缀数组板子 之前学后缀数组只是学了个大概,而且写的是二维的。现在从头理一遍,改成了算法导论上的写法。。 #include #include #include #include #define N 100003 using namespace std; int rank[N],sa[N],xx[N],yy[N],*x,*y,height[N],b[N],a[N],p,

clover_hxy的博客 1327

后缀子串排序

题目描述: 对于一个字符串,将其后缀子串进行排序,例如grain 其子串有: grain rain ain in n 然后对各子串按字典顺序排序,即: ain,grain,in,n,rain 输入: 每个案例为一行字符串。 输出: 将子串排序输出 样例输入: grain 样例输出: ain grain in n rain #include #

长镜头 1950

后缀排序 后缀自动机的应用

同步个人博客 http://sxysxy.org/blogs/23 到csdn)给一字符串的所有后缀排个序输出,字符串长度 <= 100000排序要求字典序小的在前面,在满足这个条件的情况下,短的后缀放到前面例如ababa的后缀排序结果是[a, aba, ababa, ba, baba]。暴力做法很容易想到,枚举出字符串s的总共length(s)个后缀,sort一下,然而time limit ex

HfCloud的博客 2260
下一篇: 最长可重叠的重复子串
thy_asdf
博客等级 码龄12年 16粉丝 186原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值