[UOJ35]后缀排序 做题笔记
来源:互联网 发布:vue vendor.js 编辑:程序博客网 时间:2024/05/21 04:16
题目链接:http://uoj.ac/problem/35
这也是个后缀数组的模板题。。。
#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int N=100009;char s[N];int r[N],wa[N],wb[N],wd[N],wv[N];int sa[N],rank[N],height[N];int cmp (int *r,int a,int b,int l) { return r[a]==r[b] && r[a+l]==r[b+l];}void da (int *r,int *sa,int n,int m) { int i,j,p,*x=wa,*y=wb,*t; for (i=0;i<m;i++) wd[i]=0; for (i=0;i<n;i++) wd[x[i]=r[i]]++; for (i=1;i<m;i++) wd[i]+=wd[i-1]; for (i=n-1;i>=0;i--) sa[--wd[x[i]]]=i; for (j=1,p=1;p<n;j<<=1,m=p) { for (p=0,i=n-j;i<n;i++) y[p++]=i; for (i=0;i<n;i++) if (sa[i]>=j) y[p++]=sa[i]-j; for (i=0;i<n;i++) wv[i]=x[y[i]]; for (i=0;i<m;i++) wd[i]=0; for (i=0;i<n;i++) wd[wv[i]]++; for (i=1;i<m;i++) wd[i]+=wd[i-1]; for (i=n-1;i>=0;i--) sa[--wd[wv[i]]]=y[i]; for (t=x,x=y,y=t,p=1,x[sa[0]]=0,i=1;i<n;i++) x[sa[i]]=cmp(y,sa[i-1],sa[i],j)?p-1:p++; }}void calheight (int *r,int *sa,int n) { int i,j,k=0; for (i=1;i<=n;i++) rank[sa[i]]=i; for (i=0;i<n;height[rank[i++]]=k) for (k?k--:0,j=sa[rank[i]-1];r[i+k]==r[j+k];k++);}int main () { scanf("%s",s); int n=strlen(s); for (int i=0;i<n;i++) r[i]=s[i]-96; r[n]=0;n++; da(r,sa,n,40); calheight(r,sa,n-1); for (int i=1;i<n;i++) { printf("%d ",sa[i]+1); } puts(""); for (int i=2;i<n;i++) { printf("%d ",height[i]); }}
0 0
- [UOJ35]后缀排序 做题笔记
- [UOJ35]后缀排序
- uoj35: 后缀排序
- 【uoj35】后缀排序
- UOJ35 后缀排序 后缀数组
- UOJ35 后缀排序[后缀平衡树]
- 【后缀数组】后缀排序
- 后缀排序
- 后缀数组入门题——2323后缀排序
- UOJ #35. 后缀排序(后缀数组模板题)
- UOJ #35. 后缀排序 后缀数组模板题
- 做后缀数组类的题用于调试的代码
- 10.13做题——洛谷1449后缀表达式
- uoj#35: 后缀排序
- Uoj#35. 后缀排序
- 后缀子串排序
- 【uoj #35】后缀排序
- CodeVS1500 后缀排序
- ASP.NET @Page指令属性(vs2010)
- 机房收费系统个人版重构——报表制作
- Android开发中给服务器发送Http请求获取响应
- detached entity passed to persist: com.china.user.entity.Employee
- js 限制输入框的字节数,中文两个字节,英文字母一个字节
- [UOJ35]后缀排序 做题笔记
- Window环境WordPress部署
- poj1014 Dividing 多重背包DP+神剪枝
- 线程状态转换图
- WPF-DataTemplate创建数据模版
- java并发编程基础之线程安全
- acm 1000 Moving Tables(贪心算法)
- k--Means
- GitHub 版本配置 详细教程