BZOJ 1031后缀数组
来源:互联网 发布:linux 多线程结束 编辑:程序博客网 时间:2024/05/16 16:02
题意
题解:裸后缀数组,在此后缀数组写错表示很忧伤。
最后的那个m=p也是必要的!吔屎了。
模板
#include<ctime>#include<cstdio>#include<cstdlib>#include<cstring>#include<algorithm>#include<iostream>#include<string>#include<cassert>#include<cmath>#include<vector>#include<queue>#include<stack>#include<map>#include<climits>#define X first#define Y second#define DB double#define MP make_pair#define LL long long#define pb push_back#define sqr(_) ((_)*(_))#define INF 0x3f3f3f3f#define pii pair<int,int>#define pdd pair<DB,DB>#define ull unsigned LL#define DEBUG(...) fprintf(stderr,__VA_ARGS__)using namespace std;const int MAXN=200012;char s[MAXN];int N,wx[MAXN],wy[MAXN],sa[MAXN],c[MAXN],wc[MAXN],wv[MAXN],wa[MAXN],wb[MAXN];bool cmp(int* r,int a,int b,int l){ return r[a]==r[b]&&r[a+l]==r[b+l];}void make_sa(int n,int m){ int *x=wx,*y=wy; for(int i=0;i<n;i++)c[x[i]=s[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; memset(c,0,sizeof(c)); 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]; p=1; swap(x,y); x[sa[0]]=0; for(int i=1;i<n;i++) x[sa[i]]=cmp(y,sa[i-1],sa[i],k)?p-1:p++; if(p>=n) break; m=p; }}int main(){#ifndef ONLINE_JUDGE freopen("cipher.in","r",stdin); freopen("cipher.out","w",stdout);#endif scanf("%s",s); N=strlen(s); for(int i=0;i<N;i++) s[i+N]=s[i]; N*=2; s[N++]=0; DEBUG("%d\n",N); make_sa(N,300); //da(s,sa,N,300); /*for(int i=0;i<N;i++) printf("%d ",sa[i]); puts("");*/ vector<char> ans; int rank[MAXN]={}; for(int i=0;i<N;i++) rank[sa[i]]=i; for(int i=0;i<N;i++) { if(sa[i]<(N-1)/2) ans.pb(s[sa[i]+(N-1)/2-1]); } //DEBUG("%d\n",ans.size()); for(int i=0;i<ans.size();i++) printf("%c",ans[i]); puts("");}
1 0
- BZOJ 1031后缀数组
- 后缀数组练习题bzoj 1031 后缀数组模板题目
- BZOJ 1031 字符加密【后缀数组】
- bzoj 1031 字符加密 后缀数组
- 【bzoj 1692】后缀数组
- bzoj 2251(后缀数组)
- bzoj 2119 后缀数组
- bzoj 2251 后缀数组
- UOJ #35. BZOJ 1031 后缀排序 后缀数组模板
- 【BZOJ 1031】 [JSOI2007]字符加密Cipher 后缀数组sa数组
- BZOJ 3230 后缀数组+ST
- BZOJ 3796 后缀数组+KMP
- 后缀数组 BZOJ 1031: [JSOI2007]字符加密Cipher
- BZOJ 1031 JSOI2007 字符加密Cipher 后缀数组
- 【后缀数组】【bzoj 1031】: [JSOI2007]字符加密Cipher
- BZOJ 1031 JSOI 2007 字符加密Cipher 后缀数组
- BZOJ 1031 [JSOI2007]字符加密Cipher 后缀数组
- BZOJ 1031 JSOI 2007 字符串加密 Cipher 后缀数组
- 我所学过看过的计算机语言入门书籍推荐
- 内核链表分析
- 设计模式-单例模式
- 使用github建立第一个项目和建立github的个人博客首页
- 字符编码小结
- BZOJ 1031后缀数组
- 欢迎使用CSDN-markdown编辑器
- 快速排序
- 【第一行代码】Android 活动(activity)总结
- 在adb shell中直接使用sqlite3命令操作数据库
- 就算你不是电商,你应该为你的电商朋友好好看看这篇文章
- springmvc整合dubbo分布式系统的搭建demo
- Web性能测试工具推荐
- 完蛋了,微软连个手机操作系统都不会写了,是退化了还是本身就不行