(新知)字符串--后缀数组--一个有个性的好模板
来源:互联网 发布:c语言主要知识 编辑:程序博客网 时间:2024/04/29 02:36
和其他的版本换汤不换药,以二元组的形式进行比较。时间复杂度为O(nlog2n)。
#include<bits/stdc++.h>using namespace std;#define len (int)str.size()const int maxn=int(1e6)+10;string str;int M=1;int s[maxn]; //序列数组int rnk[maxn],tmp[maxn]; //排名数组、备用排名数组bool cmp(int a,int b){ if(rnk[a]!=rnk[b]) return rnk[a]<rnk[b]; int x=a+M-1>len?-1:rnk[a+M-1]; int y=b+M-1>len?-1:rnk[b+M-1]; return x<y;}void print(string s,int pos){ for(int i=pos;i<=min((pos+M-1),int(s.size()));i++) cout<<s[i]; cout<<endl; return;}int main(){ freopen("input.txt","r",stdin); freopen("output.txt","w",stdout); getline(cin,str); for(int i=0;i<=len;i++) s[i]=i, rnk[i]=i<len?str[i]:-1; while(M<len) { M<<=1; sort(s,s+len+1,cmp); tmp[s[0]]=1; for(int i=1;i<=len;i++) if(!cmp(s[i-1],s[i])) tmp[s[i]]=tmp[s[i-1]]; else tmp[s[i]]=tmp[s[i-1]]+1; for(int i=0;i<=len;i++) rnk[i]=tmp[i]; } for(int i=0;i<=len;i++) print(str,s[i]); cout<<"--------\n"; return 0;}
2 0
- (新知)字符串--后缀数组--一个有个性的好模板
- 字符串模板总结(四):后缀数组
- 一个有个性的博客
- (新知)数据结构--Splay--模板
- 字符串的后缀数组
- cf244D. Match & Catch 字符串hash (模板)或 后缀数组。。。
- 一个很有个性的网站
- 后缀数组(好)uva10829
- 用后缀数组 求一个字符串的最长重复字串
- JAVA 如何判断一个字符串是否在一个字符串数组中?(好的编程习惯)
- 后缀数组模板(理解)
- 后缀数组 模板 (敲定)
- 后缀数组 (入门模板)
- SPOJ 694 求一个字符串有多少子串 后缀数组
- 【后缀数组】后缀数组模板
- 【后缀数组】关于后缀数组模板的注解
- 【后缀数组】关于后缀数组模板的注解续
- 免费的个性后缀域名
- 用阿里云服务器搭建个人博客
- 十六周练习--结构体—职工信息结构体
- 设计模式 - 单例模式 - Java版
- SQLMap--SQLMap使用方法
- Python 入门
- (新知)字符串--后缀数组--一个有个性的好模板
- Python下numpy不成功的解决办法(wheel方法安装,试用其他包)
- 论正则表达式
- Python 错误SyntaxError Non-ASCII character
- Android重温--文件存储之文件存储中的一些其他的知识点
- 数据结构期末总结
- Linux C UDP Socket实现客户与服务器简单通信
- 大数据Spark “蘑菇云”行动第99课:Hive性能调优之企业级Mapper和Reducer调优深度细节解密 参数配置
- Python 提醒:利用下载的zip文件进行安装第三方包如果出现import错误,有可能是下载的包不完整