题目

求第K小子串

题解

建好SAM后,拓扑排序,反向传递后面所形成的串的数量
最后从根开始,按照儿子形成串的数量与k比较走就好了

#include<iostream>
#include<cmath>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define LL long long int
#define REP(i,n) for (int i = 1; i <= (n); i++)
#define Redge(u) for (int k = h[u],to; k; k = ed[k].nxt)
using namespace std;
const int maxn = 200005,maxm = 100005,INF = 1000000000;
inline int read(){int out = 0,flag = 1; char c = getchar();while (c < 48 || c > 57) {if (c == '-') flag = -1; c = getchar();}while (c >= 48 && c <= 57) {out = (out << 3) + (out << 1) + c - '0'; c = getchar();}return out * flag;
}
int pre[maxn],sz[maxn],step[maxn],ch[maxn][26],cnt,last,n;
int a[maxn],b[maxn];
char s[maxn];
void ins(int x){int p = last,np = ++cnt;last = np; step[np] = step[p] + 1;while (p && !ch[p][x]) ch[p][x] = np,p = pre[p];if (!p) pre[np] = 1;else {int q = ch[p][x];if (step[q] == step[p] + 1) pre[np] = q;else {int nq = ++cnt; step[nq] = step[p] + 1;for (int i = 0; i < 26; i++) ch[nq][i] = ch[q][i];pre[nq] = pre[q]; pre[np] = pre[q] = nq;while (ch[p][x] == q) ch[p][x] = nq,p = pre[p];}}
}
void walk(int k){int u = 1;while (k){for (int i = 0; i < 26; i++) if (ch[u][i]){if (sz[ch[u][i]] >= k){putchar(i + 'a');k--; u = ch[u][i];break;}else k -= sz[ch[u][i]];}}puts("");
}
void solve(){REP(i,cnt) b[step[i]]++;REP(i,cnt) b[i] += b[i - 1];REP(i,cnt) a[b[step[i]]--] = i;for (int i = cnt; i; i--){int u = a[i]; sz[u] = 1;for (int j = 0; j < 26; j++)if (ch[u][j]) sz[u] += sz[ch[u][j]];}int Q = read();while (Q--) walk(read());
}
int main(){scanf("%s",s + 1);n = strlen(s + 1); cnt = last = 1;REP(i,n) ins(s[i] - 'a');solve();return 0;
}

转载于:https://www.cnblogs.com/Mychael/p/8298017.html

SPOJ - SUBLEX 【后缀自动机】相关推荐

  1. SPOJ NSUBSTR(后缀自动机)

    题目链接:http://www.spoj.com/problems/NSUBSTR/ 题目大意:给你一个字符串s(len(s)<=250000),求f[i](i=1...len(s)),其中f[ ...

  2. SPOJ LCS 后缀自动机

    用后缀自动机求两个长串的最长公共子串,效果拔群.多样例的时候memset要去掉. 解题思路就是跟CLJ的一模一样啦. #pragma warning(disable:4996) #include< ...

  3. SPOJ7258 SUBLEX 后缀自动机

    题目链接 链接是洛谷有翻译的链接. 题意: 给你一个字符串,有T次询问,每次问你在整个字符串中排名为k的子串是哪一个.字符串长度<=90000,T<=500,只统计本质不同的串. 题解: ...

  4. SPOJ 7258 (后缀自动机)

    转载:http://hzwer.com/4492.html 给一个长度不超过90000的串S,每次询问它的所有不同子串中,字典序第K小的,询问不超过500个. 搞出后缀自动机 dp处理出每个点往下走能 ...

  5. SPOJ 7258 SUBLEX 后缀自动机

    求第k大子串. 按拓扑序处理出一个点往后有多少条路径到终态. 答案就很明显了. #include <cstring> #include <cstdio> #define FOR ...

  6. 【SPOJ】7258. Lexicographical Substring Search(后缀自动机)

    http://www.spoj.com/problems/SUBLEX/ 后缀自动机系列完成QAQ...撒花..明天or今晚写个小结? 首先得知道:后缀自动机中,root出发到任意一个状态的路径对应一 ...

  7. 【后缀自动机】SPOJ 1812-LCSII

    题意: 给出最多10个长度不超过100000的字符串,求他们的LCS的长度.时限是鬼畜的0.25s . 后缀自动机练习...虽然有人这么说但我并不觉得hash能过. 本题可以说是[论SAM中按step ...

  8. SPOJ 1812 LCS2 - Longest Common Substring II (后缀自动机)【两种做法】

    SPOJ 1812 LCS2 - Longest Common Substring II (后缀自动机)[两种做法] 手动博客搬家: 本文发表于20181217 23:54:35, 原地址https: ...

  9. SPOJ 7258 SUBLEX 后缀数组_二分答案_前缀和

    SPOJ 7258 SUBLEX 后缀数组_二分答案_前缀和 Code: #include <cstdio> #include <algorithm> #include < ...

  10. SP7258 SUBLEX (后缀自动机)

    SUBLEX - Lexicographical Substring Search - 洛谷 题意 给定一个字符串,求本质不同排名第k小的子串 输入格式: 第一行给定主串(len<=90000) ...

最新文章

  1. Activiti 工作流引擎的初步使用
  2. c语言16x32点阵显示汉字,点阵16*32滚屏显示汉字
  3. java-判断相同和对象比较大小
  4. SAP Spartacus CMSService 的调用栈以及 meta 标签的生成过程
  5. python深浅拷贝 面试_Python面试宝典之基础篇-02
  6. Visual Studio 单元测试之六---UI界面测试
  7. SHOP++ JTM2.5发布
  8. Mark—零散知识汇总
  9. Ubuntu12.04 在线安装JDK7
  10. Apollo搭建使用
  11. 小米手机权限开启方法9
  12. SAP 登录的一些参数
  13. 添加自签发的 SSL 证书为受信任的根证书
  14. Android开发之连接实体手机进行开发的步骤 遇到的“an app is obsuring...“的问题及解决
  15. signature=4746e22a831cd5efc939a83a10a194fc,Title page for ETD etd-07072014-094746
  16. Excel格式刷使用
  17. 【Web Development - AnnihilateSword】03 - Intermediate HTML
  18. 【优秀课设】基于OpenCV-Python的树莓派人脸识别及89C52单片机控制系统设计(指定照片进行识别、遍历目录下所有照片依次识别)
  19. 发那科机器人GI分配_发那科机器人应用-数值寄存器 R[]
  20. 用文件的 sha1值判断文件是否重复(delphi语言)

热门文章

  1. Linux命令笔记(一)
  2. 记录远程桌面登录者的IP和MAC
  3. SQL查询单表数据(一)
  4. Mr.J-- HTTP学习笔记(四)-- 连接管理
  5. 六时出行 App 隐私政策
  6. Numpy 通用函数
  7. 新项目上传到码云托管
  8. Python开发【第二篇】:Python基本数据类型
  9. POJ 2115 C Looooops (扩展欧几里德解同余方程 Ax = B(mod C) )
  10. Spring开发--Bean配置实例讲解