问题描述

BZOJ1031

LG4051


题解

发现这是一个环,根据经验,破环为链,于是字符环变为了字符串

之后对这个复制之后的字符串求后缀数组。

$len$代表原字符串长度,代表复制后的字符串长度

最后输出的时候,判断一下,如果$SA_i \le len$,则输出$str_i$。


Code

 #include<bits/stdc++.h>
using namespace std; #define maxn 1000007 void read(int &x){
x=;char ch=;int fh;
while(ch!='-'&&(ch<''||ch>'')) ch=getchar();
if(ch=='-') fh=-,ch=getchar();
else fh=;
while(ch>=''&&ch<=''){
x=(x<<)+(x<<)+ch-'';
ch=getchar();
}
x*=fh;
} char s[maxn];
int n,m,sa[maxn],x[maxn],y[maxn],ct[maxn]; int chk(int x){
return x>?x:x+n;
} void SA(){
for(register int i=;i<=n;i++) ct[x[i]=s[i]]++;
for(register int i=;i<=m;i++) ct[i]+=ct[i-];
for(register int i=n;i>=;i--) sa[ct[x[i]]--]=i;
for(register int k=;k<=n;k<<=){
int tot=;
for(register int i=n-k+;i<=n;i++) y[++tot]=i;
for(register int i=;i<=n;i++) if(sa[i]>k) y[++tot]=sa[i]-k;
for(register int i=;i<=m;i++) ct[i]=;
for(register int i=;i<=n;i++) ct[x[i]]++;
for(register int i=;i<=m;i++) ct[i]+=ct[i-];
for(register int i=n;i>=;i--) sa[ct[x[y[i]]]--]=y[i],y[i]=;
swap(x,y);x[sa[]]=tot=;
for(register int i=;i<=n;i++)
if(y[sa[i]]==y[sa[i-]]&&y[sa[i]+k]==y[sa[i-]+k]) x[sa[i]]=tot;
else x[sa[i]]=++tot;
if(tot==n) break;
m=tot;
}
} int rnk[maxn];
int let;
int main(){
ios::sync_with_stdio();
cin>>(s+);n=strlen(s+);let=n;
for(register int i=n+;i<=n*;i++) s[i]=s[i-n];
n*=;
m=;SA();
for(register int i=;i<=n;i++){
rnk[sa[i]]=i;
}
for(register int i=;i<=n;i++){
if(sa[i]<=let)
cout<<s[sa[i]+let-];
}
cout<<endl;
return ;
}

最新文章

  1. ES6+ 现在就用系列(一):为什么使用ES6+
  2. Android -- PopupWindow(其中嵌套ListView 可以被点击)
  3. 概率论与数理统计讲课PPT和往年期末试卷
  4. 做贴吧系统,偶然发现使用iframe的弊端
  5. ListView在列表的头部和底部添加布局——addHeaderView,addFooterView
  6. eclipse启动tomcat错误:A Java Exception has occurred
  7. 一张广告图片引起的思维DFS
  8. 设计模式:中介者模式(Mediator)
  9. 如何重置mysql的密码
  10. [ZOJ 2836] Number Puzzle
  11. 深入理解C#中this/partial/null的使用
  12. python的bind函数
  13. JAVA常用类库简介(转)
  14. Linux系统centOS7在虚拟机下的安装及XShell软件的配置
  15. 【转载】小tips: PC端传统网页试试使用Zepto.js进行开发
  16. Java 内部类示例
  17. Delphi中Chrome Chromium、Cef3学习笔记(六)
  18. 常见的anaconda的操作
  19. 【BI学习笔记】适合集成到项目里的BI:Wyn Enterprise
  20. JQuery中$.cookie()方法的使用[转]

热门文章

  1. Centos7源码编译安装PHP7.2(生产环境)
  2. Numpy 随机序列 shuffle &amp; permutation
  3. spring cloud 2.x版本 Gateway动态路由教程
  4. jTessBoxEditor训练识别库
  5. Numpy数值类型与数值运算-03
  6. SpringCloud的入门学习之Netflix-eureka(Eureka的集群版搭建)
  7. 使用maven快速入门
  8. JQuery学习笔记(1)——选择器
  9. java基础(25):Properties、序列化流、打印流、commons-IO
  10. Python中最常用的字符串方法!