bzoj 1031 字符加密 后缀数组
来源:互联网 发布:vue index.html引入js 编辑:程序博客网 时间:2024/04/30 06:01
把整个前n-1个字符复制到字符串末尾,求个后缀数组搞就可以。
#include<cstdio>#include<cstring>#include<iostream>#define maxn 200010using namespace std;char s[maxn];struct Suffix{ int sa[maxn],rank[maxn],height[maxn]; int tmp[maxn],cnt[maxn],sec[maxn],n; void get_sa() { n=strlen(s+1); for(int i=1;i<=n;i++) rank[i]=s[i]; for(int i=1;i<=n;i++) cnt[rank[i]]++; for(int i=1;i<=256;i++) cnt[i]+=cnt[i-1]; for(int i=1;i<=n;i++) sa[cnt[rank[i]]--]=i; for(int k=1;k<=n;k<<=1) { int top=0; for(int i=n-k+1;i<=n;i++) sec[++top]=i; for(int i=1;i<=n;i++) if(sa[i]>k) sec[++top]=sa[i]-k; for(int i=0;i<=n;i++) cnt[i]=0; for(int i=1;i<=n;i++) cnt[rank[i]]++; for(int i=1;i<=n;i++) cnt[i]+=cnt[i-1]; for(int i=n;i>=1;i--) sa[cnt[rank[sec[i]]]--]=sec[i]; tmp[sa[1]]=top=1; for(int i=2;i<=n;i++) { if(rank[sa[i]]!=rank[sa[i-1]]||rank[sa[i]+k]!=rank[sa[i-1]+k]) top++; tmp[sa[i]]=top; } for(int i=1;i<=n;i++) rank[i]=tmp[i]; } int k=0; for(int i=1;i<=n;i++) { if(k) k--;int j=sa[rank[i]-1]; while(i+k<=n&&j+k<=n&&s[i+k]==s[j+k]) k++; height[rank[i]]=k; } } void print() { for(int i=1;i<=n;i++) printf("%d ",sa[i]);puts(""); for(int i=1;i<=n;i++) printf("%d ",height[i]);puts(""); } void work(int l) { for(int i=1;i<=n;i++) { int p=sa[i]; if(p<=l) putchar(s[p+l-1]); } }}SA;int main(){ scanf("%s",s+1); int l=strlen(s+1); for(int i=1;i<l;i++) s[l+i]=s[i]; SA.get_sa();SA.work(l); return 0;}
1 0
- BZOJ 1031 字符加密【后缀数组】
- bzoj 1031 字符加密 后缀数组
- 【BZOJ 1031】 [JSOI2007]字符加密Cipher 后缀数组sa数组
- 后缀数组 BZOJ 1031: [JSOI2007]字符加密Cipher
- BZOJ 1031 JSOI2007 字符加密Cipher 后缀数组
- 【后缀数组】【bzoj 1031】: [JSOI2007]字符加密Cipher
- BZOJ 1031 JSOI 2007 字符加密Cipher 后缀数组
- BZOJ 1031 [JSOI2007]字符加密Cipher 后缀数组
- 【BZOJ 1031】 [JSOI2007]字符加密Cipher|后缀数组
- 【bzoj 1031】[JSOI2007] 字符加密Cipher(后缀数组)
- bzoj 1031: [JSOI2007]字符加密Cipher 后缀数组
- BZOJ 1031: [JSOI2007]字符加密Cipher 后缀数组
- BZOJ 1031: [JSOI2007]字符加密Cipher 后缀数组
- Bzoj 1031: [JSOI2007]字符加密Cipher(后缀数组)
- 后缀数组——bzoj 1031: [JSOI2007]字符加密Cipher
- 后缀数组(bzoj 1031: [JSOI2007]字符加密Cipher)
- BZOJ 1031 [JSOI2007]字符加密Cipher 后缀数组
- BZOJ 1031 字符加密Cipher 后缀数组(计数排序)
- 确保万得返回了数据
- JSON需要转义的字符
- iOS 开发--Objective-C 反射机制
- ssh远程执行命令退出
- InstallShield Limited Edition for Visual Studio 2013
- bzoj 1031 字符加密 后缀数组
- Docker网络管理-外部访问容器
- ExpandableListView再学习(未完待续)
- Android开发代码规范
- 降维:主成分分析(PCA)
- 高分子材料成型(八)
- 笔试面试算法经典--最长回文子串
- 【SHOI&SXOI2017】bzoj4872 分手是祝愿
- NYOJ 2