https://www.lydsy.com/JudgeOnline/problem.php?id=3998

https://www.luogu.org/problemnew/show/P3975

对于一个给定长度为N的字符串,求它的第K小子串是什么。

后缀自动机,对l排序然后从后往前推size和sum数组(貌似也可以叫拓扑?)。

size:当前状态的字符串个数(贡献)。

sum:以当前状态为起点之后的满足要求的字符串个数。

#include<cstdio>
#include<iostream>
#include<queue>
#include<cstring>
#include<algorithm>
#include<cctype>
using namespace std;
typedef long long ll;
const int N=1e6+;
struct tree{
int a[],fa,l;
}tr[N];
char s[N];
int last,cnt,t,k;
ll a[N],w[N],size[N],sum[N];
inline void insert(int c){
int p=last,np=++cnt;
last=np;tr[np].l=tr[p].l+;
for(;p&&!tr[p].a[c];p=tr[p].fa)tr[p].a[c]=np;
if(!p)tr[np].fa=;
else{
int q=tr[p].a[c];
if(tr[p].l+==tr[q].l)tr[np].fa=q;
else{
int nq=++cnt;tr[nq].l=tr[p].l+;
memcpy(tr[nq].a,tr[q].a,sizeof(tr[q].a));
tr[nq].fa=tr[q].fa;tr[q].fa=tr[np].fa=nq;
for(;p&&tr[p].a[c]==q;p=tr[p].fa)tr[p].a[c]=nq;
}
}
size[np]=;
}
int main(){
scanf("%s%d%d",s,&t,&k);
int len=strlen(s);
last=cnt=;
for(int i=;i<len;i++)insert(s[i]-'a');
for(int i=;i<=cnt;i++)w[tr[i].l]++;
for(int i=;i<=len;i++)w[i]+=w[i-];
for(int i=;i<=cnt;i++)a[w[tr[i].l]--]=i;
for(int i=cnt;i>=;i--){
if(t)size[tr[a[i]].fa]+=size[a[i]];
else size[a[i]]=;
}
size[]=;
for(int i=cnt;i>=;i--){
sum[a[i]]=size[a[i]];
for(int j=;j<;j++)
if(tr[a[i]].a[j])
sum[a[i]]+=sum[tr[a[i]].a[j]];
}
if(k>sum[])puts("-1");
else{
int now=;
while(k>size[now]){
k-=size[now];
int i;
for(int i=;i<;i++){
if(k>sum[tr[now].a[i]])
k-=sum[tr[now].a[i]];
else{
now=tr[now].a[i];
putchar(i+'a');
break;
}
}
}
puts("");
}
return ;
}

+++++++++++++++++++++++++++++++++++++++++++

+本文作者:luyouqi233。               +

+欢迎访问我的博客:http://www.cnblogs.com/luyouqi233/+

+++++++++++++++++++++++++++++++++++++++++++

最新文章

  1. 如何做优化,UITabelView才能更加顺滑 (转载)
  2. DragRow-GYF
  3. Junity测试最大子数列和的Java程序
  4. 介绍开源的.net通信框架NetworkComms框架之三 传递List
  5. Bootstrap的宽度和分辨率的差别
  6. phpMyAdmin 完整路径泄露漏洞2
  7. Sort(归并)
  8. Josn转DataTable(转)
  9. WordPress教程之判断文章所属分类函数in_category、is_category
  10. POJ 1742 Coins (多重背包)
  11. Crashing Robots(水题,模拟)
  12. python爬取今日头条关键字图集
  13. python基础学习13----生成器&amp;迭代器
  14. [Spring Boot] Singleton and Prototype
  15. 搭建 Visual Studio 2012 + DXperience-13.2.6 + MySql 开发平台
  16. Windowserver2012部署always on
  17. apply的理解和数组降维
  18. 深入学习QWidget-1
  19. hdu1702 ACboy needs your help again!(栈处理)
  20. HDU 4717 The Moving Points(三分法)(2013 ACM/ICPC Asia Regional Online ―― Warmup2)

热门文章

  1. protected修饰符详解
  2. hdu2112HDU Today(floyd+map数组对字符串的应用)
  3. uvaoj455Periodic Strings(枚举)
  4. Qt-第一个QML程序-4-自定义按钮类,动画,状态
  5. 一种新的自动化 UI 测试解决方案 Airtest Project
  6. ntp-redhat 同步时间配置
  7. Python里//与/的区别?
  8. [JSON].toXMLString()
  9. 165. Merge Two Sorted Lists【LintCode by java】
  10. 洛谷P1068 分数线划定:sort结构体排序+贪心