bzoj1031 [JSOI2007]字符加密 后缀数组改
来源:互联网 发布:成都富士康java 编辑:程序博客网 时间:2024/06/08 05:17
DA后缀数组构造的思想主要的就是倍增
即类似RMQ的双关键字排序
所以就可以用双关键字排序的方法来构造后缀数组
基数排序和快排都可以,鉴于是1e5,直接nlogn就够了
码:
#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;#define N 500005int rk[N],len,n,i,k,cnt;char str[N];struct SA{int x,y,id;}sa[N];bool cmp(SA a,SA b){if(a.x==b.x)return a.y<b.y;return a.x<b.x;}void Da2(){for(i=0;i<n;i++)sa[i].x=str[i],sa[i].id=i;for(k=1;k<n;k*=2){for(i=0;i<n;i++)sa[i].y=sa[i+k].x;//得到第二关键字sort(sa,sa+n,cmp);//排序 cnt=0;for(i=0;i<n;i++){if(sa[i].x==sa[i-1].x&&sa[i].y==sa[i-1].y);else cnt++;rk[sa[i].id]=cnt; }for(i=0;i<n;i++)sa[i].x=rk[i],sa[i].id=i;}}int main(){scanf("%s",str);len=strlen(str);for(i=len;i<len*2-1;i++)str[i]=str[i-len];n=len*2-1;Da2();sort(sa,sa+n,cmp);for(i=0;i<n;i++){if(sa[i].id<len)printf("%c",str[sa[i].id+len-1]);}}
阅读全文
0 0
- bzoj1031 [JSOI2007]字符加密 后缀数组改
- [BZOJ1031][JSOI2007]字符加密Cipher && 后缀数组
- [BZOJ1031]JSOI2007字符加密 |后缀数组
- [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】字符加密 后缀数组
- [bzoj1031][后缀数组]字符加密
- [BZOJ1031]-[JSOI2007]字符加密Cipher-后缀数组模板(附自己的理解)
- 【JSOI2007】【后缀数组】字符加密
- Bootstrap 表格不对齐
- Oracle 存储过程、存储函数、触发器
- Github pages+HEXO+域名绑定搭建个人博客
- 5.字体
- egg.js官方教程攻略
- bzoj1031 [JSOI2007]字符加密 后缀数组改
- 学习6
- 欢迎使用CSDN-markdown编辑器
- win7_64+opencv3.10+opencv_contrib+cmake3.6配置
- 整数中x出现的次数(1-n中x出现的次数)
- tomcat 广播方式配置session共享的server.xml
- Linux——PXELINUX网络安装
- Java中对象的初始化过程详解
- ssm项目遇到的问题