uoj35: 后缀排序
来源:互联网 发布:mysql nosql 编辑:程序博客网 时间:2024/06/06 02:18
题目链接
后缀数组模板题。
#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespace std;const int N = 100010;int n, c[N], sa[N];int rank[N], height[N];char str[N];inline void buildSa(int m) { int *x = rank, *y = height; for (int i = 0; i < m; i++) c[i] = 0; for (int i = 0; i < n; i++) c[x[i] = str[i]]++; for (int i = 1; i < m; i++) c[i] += c[i - 1]; for (int i = n - 1; i >= 0; i--) sa[--c[x[i]]] = i; for (int k = 1; k <= n; k <<= 1) { int p = 0; for (int i = n - k; i < n; i++) y[p++] = i; for (int i = 0; i < n; i++) if (sa[i] >= k) y[p++] = sa[i] - k; for (int i = 0; i < m; i++) c[i] = 0; for (int i = 0; i < n; i++) c[x[y[i]]]++; for (int i = 1; i < m; i++) c[i] += c[i - 1]; for (int i = n - 1; i >= 0; i--) sa[--c[x[y[i]]]] = y[i]; swap(x, y); x[sa[0]] = 0; p = 1; for (int i = 1; i < n; i++) x[sa[i]] = y[sa[i]] == y[sa[i - 1]] && y[sa[i] + k] == y[sa[i - 1] + k] ? p - 1 : p++;//这里有点担心越界 if (p >= n) break; m = p; }}inline void calcHeight() { int k = 0; for (int i = 0; i < n; i++) rank[sa[i]] = i; for (int i = 0; i < n - 1; i++) { if (k) k--; int j = sa[rank[i] - 1]; while (str[i + k] == str[j + k]) k++; height[rank[i]] = k; }}int main() { scanf("%s", str); n = strlen(str); for (int i = 0; i < n; i++) str[i] -= 'a' - 1; str[n++] = 0;//补$不能省略 buildSa(30); calcHeight(); for (int i = 1; i < n; i++) printf("%d ", sa[i] + 1); puts(""); for (int i = 2; i < n; i++) printf("%d ", height[i]); puts(""); return 0;}
0 0
- [UOJ35]后缀排序
- uoj35: 后缀排序
- 【uoj35】后缀排序
- UOJ35 后缀排序 后缀数组
- UOJ35 后缀排序[后缀平衡树]
- [UOJ35]后缀排序 做题笔记
- 【后缀数组】后缀排序
- 后缀排序
- uoj#35: 后缀排序
- Uoj#35. 后缀排序
- 后缀子串排序
- 【uoj #35】后缀排序
- CodeVS1500 后缀排序
- 【uoj 35】后缀排序
- uoj #35. 后缀排序
- uoj P35 后缀排序
- 后缀子串排序
- 后缀子串排序
- IOC初认识
- iOS之网络—— NSURLSessionDataTask文件离线断点下载、NSURLSession文件上传、AFN基本使用、Cocoapods安装
- contos firewalld 打开或关闭端口
- 关于PHP程序员解决问题的能力
- Android 可以在控件中直接使用的椭圆
- uoj35: 后缀排序
- html5 app开发,你知道多少?
- 在sublime Text3 下使用ctags
- 2017的正确“运行”方式
- 2017该做哪些流行的项目呢?
- Warning:The `android.dexOptions.incremental` property is deprecated and it has no effect on the buil
- 生成SSHkey
- sourcetree 免费许可证
- Android 可以直接在控件中使用的圆角矩形