弦论 bzoj-3998 TJOI-2015

题目大意:给定一个字符串,求其$k$小子串。

注释:$1\le length \le 5\cdot 10^5$,$1\le k\le 10^9$。


想法

后缀数组傻逼题。

初学后缀自动机我们尝试用后缀自动机解决。

首先先建出$SAM$。

分别考虑$T=0$和$T=1$的情况。

我们处理$f$数组表示以当前节点代表的字符串为前缀的子串个数。

它们俩之间的区别就是$Right$集合的大小。

详情看代码把。

代码

#include <bits/stdc++.h>
#define N 1000010
using namespace std;
int n,opt,nxt[N][26],fa[N],dis[N],lst=1,cnt=1,v[N],q[N],Right[N],f[N];
char str[N];
void update(int c)
{
int p=lst,np=lst=++cnt;
dis[np]=dis[p]+1; Right[np]=1;
while(p&&!nxt[p][c]) nxt[p][c]=np,p=fa[p];
if(!p) fa[np]=1;
else
{
int q=nxt[p][c];
if(dis[q]==dis[p]+1) fa[np]=q;
else
{
int nq=++cnt;
memcpy(nxt[nq],nxt[q],sizeof nxt[q]);
dis[nq]=dis[p]+1; fa[nq]=fa[q]; fa[np]=fa[q]=nq;
while(p&&nxt[p][c]==q) nxt[p][c]=nq,p=fa[p];
}
}
}
void init()
{
for(int i=1;i<=cnt;i++) v[dis[i]]++;
for(int i=1;i<=n;i++) v[i]+=v[i-1];
for(int i=cnt;i;i--) q[v[dis[i]]--]=i;
for(int i=cnt;i;i--)
{
int t=q[i];
if(opt) Right[fa[t]]+=Right[t];
else Right[t]=1;
}
Right[1]=0; for(int i=cnt;i;i--)
{
int t=q[i]; f[t]=Right[t];
for(int j=0;j<26;j++) f[t]+=f[nxt[t][j]];
}
}
void query(int p,int k)
{
if(k<=Right[p]) return;
k-=Right[p];
for(int i=0;i<26;i++) if(nxt[p][i])
{
if(k<=f[nxt[p][i]])
{
putchar(i+'a'); query(nxt[p][i],k);
return;
}
k-=f[nxt[p][i]];
}
}
int main()
{
int k; scanf("%s%d%d",str+1,&opt,&k); n=strlen(str+1);
for(int i=1;i<=n;i++) update(str[i]-'a');
init();
if(k>f[1]) puts("-1");
else query(1,k);
return 0;
}

小结:后缀自动机搭配其他的数据结构的时候会比较有用,但是感觉后缀数组更好写啊$qwq$......

最新文章

  1. vs2015 command prompt here
  2. yii 的网址收藏
  3. php利用svn hooks将程序自动发布到测试环境
  4. 在Salesforce中进行Report和Dashboard的配置
  5. PAT天梯赛练习题 L3-002. 堆栈(线段树查询第K大值或主席树)
  6. ARM的QT phonon 的移植
  7. hdu 1045 Fire Net(最小覆盖点+构图(缩点))
  8. 设置nginx禁止通过IP访问服务器的方法
  9. Strom的安装及使用
  10. Wbemtest查询
  11. poj 2480 (欧拉函数应用)
  12. 转:设置Loadrunner负载机临时文件目录
  13. [Bayesian] “我是bayesian我怕谁”系列 - Gaussian Process
  14. Java中的集合框架(下)
  15. Apache Hadoop 2.9.2 的HDFS High Available模式部署
  16. Shiro笔记(二)Shiro集成SpringMVC的环境配置
  17. maven下载的jar相应pom文件下载不完整问题。
  18. 启动MyEclipse8.5时未响应
  19. 转载linux性能调优工具
  20. Spark-scala-API

热门文章

  1. 基于 python 的接口测试框架
  2. 11G RAC环境数据库启动和关闭
  3. Python 访问字典(dictionary)中元素
  4. 页面定制CSS代码
  5. vscode 用户代码片段 vue初始化模板 Snippet #新加入开头注释 自动生成文件名 开发日期时间等内容
  6. springboot测试的时候插入数据: error performing isolated work; SQL [n/a]; nested exception is org.hibernate...
  7. 线性判别分析(LDA)
  8. InnoDB INFORMATION_SCHEMA Temporary Table Info Table
  9. python_OS 模块
  10. 将树莓派3B+变成WiFi热点