P3809 【模版】后缀排序
2024-10-01 11:25:11
题目背景
这是一道模版题。
题目描述
读入一个长度为 nn 的由大小写英文字母或数字组成的字符串,请把这个字符串的所有非空后缀按字典序从小到大排序,然后按顺序输出后缀的第一个字符在原串中的位置。位置编号为 11 到 nn。
输入输出格式
输入格式:
一行一个长度为 nn 的仅包含大小写英文字母或数字的字符串。
输出格式:
一行,共n个整数,表示答案。
输入输出样例
输入样例#1:
ababa
输出样例#1:
5 3 1 4 2
说明
n <= 10^6n<=106
看了一下午的后缀数组
基数排序的思想我懂啊。,
倍增的思想我懂啊。。
后缀数组的思想我也懂啊。。
为毛代码一行都看不懂啊。。。。。。。。。。。。。。。。。。。。。。。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
const int MAXN=;
void read(int &n)
{
char c='+';int x=;bool flag=;
while(c<''||c>''){c=getchar();if(c=='-')flag=;}
while(c>=''&&c<=''){x=x*+(c-);c=getchar();}
flag==?n=-x:n=x;
}
int tax[MAXN];// 基数排序的辅助数组
int tp[MAXN];//基数排序的第二关键字
int a[MAXN];// 字符串数组
int sa[MAXN];//
int rak[MAXN];
int n,m;
void qsort()
{
for(int i=;i<=m;i++) tax[i]=;
for(int i=;i<=n;i++) tax[rak[tp[i]]]++;
for(int i=;i<=m;i++) tax[i]+=tax[i-];
for(int i=n;i>=;i--) sa[tax[rak[tp[i]]]--]=tp[i];
}
int comp(int *f,int x,int y,int l)
{
return (f[x]==f[y]&&f[x+l]==f[y+l]);
}
void suffix_ar()
{
for(int i=;i<=n;i++)
rak[i]=a[i],tp[i]=i;
m=,qsort();
for(int w=,p=,i;p<n;w+=w,m=p)
{
for(p=,i=n-w+;i<=n;i++)
tp[++p]=i;
for(int i=;i<=n;i++)
if(sa[i]>w)
tp[++p]=sa[i]-w;
qsort(),swap(rak,tp),rak[sa[]]=p=;
for(int i=;i<=n;i++)
rak[sa[i]]=comp(tp,sa[i],sa[i-],w)? p:++p;
}
for(int i=;i<=n;i++)
printf("%d ",sa[i]);
}
int main()
{
string s;
cin>>s;
n=s.length();
for(int i=;i<(s.length());i++)
a[i+]=s[i]-;
suffix_ar();
return ;
}
最新文章
- python学习笔记-进程线程
- C#中Directory.GetFiles() 函数的使用
- 【读书笔记】iOS-程序进入到后台
- HTML 学习笔记 CSS样式(背景)
- 关于 xcode5 真机调试 的 no matching provisioning profiles found
- C#:org.in2bits.MyXls 文本格式日期 转换,以及设置单元格格式,保留两位小数点
- MySQL中distinct和group by性能比较[转]
- python的使用环境总结
- [z]Google SPDY介绍
- iOS开发——实用篇Swift篇&;保存图片到相册
- latex引用多篇参考文献
- mysql与java数据类型对应关系
- Sql缓存依赖--数据库缓存
- 解决Eclipse无法添加Tomcat服务器的问题
- 原理图及PCB设计
- 利用VNC远程登录Linux服务器简易版
- MySQL备份常用命令总结
- Integration between SharePoint 2013 and CRM 2013 (On-Premise)
- [Codeforces178F2]Representative Sampling
- 通用订单搜索的API设计得失录
热门文章
- 跨域-jsonp、cors、iframe、document.domain、postMessage()
- 使用最新vue_cli+webpack搭建的模版
- SQL SERVER中的sys.objects和sysobjects的区别
- Caffe Batch Normalization推导
- github踩坑之git命令收集与整理(windows)
- 浅谈AVL树,红黑树,B树,B+树原理及应用
- CDR X7 限时3折618年中大促,是时候出手了!
- post数据html数据获取危险处理办法
- 关于mysql无法添加中文数据的问题以及解决方案(转载)
- 一些html5