BZOJ1031[JSOI2007]字符加密Cipher 后缀数组
来源:互联网 发布:手机数据联网控制软件 编辑:程序博客网 时间:2024/06/05 13:25
一万年没打过SA。。
对于原串复制一遍,然后对于每个i<=n的,输出一下他的末尾就好了。
#include<cstdio>#include<algorithm>#include<iostream>#include<cstring>#define fo(i,a,b) for(int i=a;i<=b;i++)#define fd(i,a,b) for(int i=a;i>=b;i--)using namespace std;const int N=2e5+5;char s[N];int sa[N],n;int sum[N],rank[N],nrank[N],nsa[N];inline void sort(int j){ memset(sum,0,sizeof(sum)); fo(i,1,n)sum[rank[i+j]]++; fo(i,1,n)sum[i]+=sum[i-1]; fd(i,n,1)nsa[sum[rank[i+j]]--]=i; memset(sum,0,sizeof(sum)); fo(i,1,n)sum[rank[i]]++; fo(i,1,n)sum[i]+=sum[i-1]; fd(i,n,1)sa[sum[rank[nsa[i]]]--]=nsa[i];}inline void getsa(){ memset(sum,0,sizeof(sum)); fo(i,1,n)rank[i]=s[i]; fo(i,1,n)sum[rank[i]]++; fo(i,1,255)sum[i]+=sum[i-1]; fd(i,n,1) sa[sum[rank[i]]--]=i; nrank[sa[1]]=1; int p=1; fo(i,2,n) nrank[sa[i]]=rank[sa[i]]==rank[sa[i-1]]?p:++p; fo(i,1,n)rank[i]=nrank[i]; for(int j=1;j<=n;j<<=1) { sort(j); nrank[sa[1]]=1; p=1; fo(i,2,n) { if (rank[sa[i]]!=rank[sa[i-1]]||rank[sa[i]+j]!=rank[sa[i-1]+j])p++; nrank[sa[i]]=p; } fo(i,1,n)rank[i]=nrank[i]; } return;}int main(){ scanf("%s",s+1); n=strlen(s+1); fo(i,1,n)s[i+n]=s[i]; n*=2; getsa(); fo(i,1,n)if (sa[i]<=n/2) printf("%c",s[sa[i]+n/2-1]); printf("\n"); return 0;}
0 0
- [BZOJ1031][JSOI2007]字符加密Cipher && 后缀数组
- [JSOI2007] [BZOJ1031] 字符加密Cipher - 后缀数组
- BZOJ1031 [JSOI2007]字符加密Cipher 后缀数组
- [BZOJ1031][[JSOI2007]字符加密Cipher] 后缀数组
- BZOJ1031[JSOI2007]字符加密Cipher 后缀数组
- [bzoj1031][JSOI2007]字符加密Cipher 后缀数组
- [BZOJ1031][JSOI2007]字符加密Cipher(后缀数组)
- 【bzoj1031】【JSOI2007】【字符加密】【Cipher】【字符串】【后缀数组】
- 后缀数组 模板【JSOI2007】 bzoj1031 字符加密Cipher
- 【后缀数组】BZOJ1031(JSOI2007)[字符加密Cipher]题解
- 后缀数组——BZOJ1031 [JSOI2007]字符加密Cipher
- bzoj1031: [JSOI2007]字符加密Cipher(后缀数组)
- BZOJ1031: [JSOI2007]字符加密Cipher
- [Bzoj1031][JSOI2007]字符加密Cipher
- [bzoj1031][JSOI2007]字符加密Cipher
- [BZOJ1031][JSOI2007]字符加密Cipher
- bzoj1031: [JSOI2007]字符加密Cipher
- 【JSOI2007】【BZOJ1031】字符加密Cipher
- 存储器管理总结
- ConcurrentHashMap源码分析(一)
- java实现redis分布式锁实例
- linux中hadoop 执行jar包
- 关于loadrunner使用web_add_header添加HTTP信息头(比如Content-Type,token等)和使用web_custom_request()提交json数据
- BZOJ1031[JSOI2007]字符加密Cipher 后缀数组
- android相机开发文章
- [Linux git]Linux下git push 不用每次输密码的方法
- 撒钱教
- table 点击编辑 修改当前行
- Android仿余额宝实现七天年化收益率图表
- 你根本不知道的冷知识,看完我惊呆了,原来.....
- ubuntu 安装wordpress让其可以自动更新升级的方法
- sum-root-to-leaf-numbers