hdu3518 Boring Counting[后缀排序]
- 裸的统计不同的重复出现子串(不重叠)种数的题。
多次使用后缀排序要注意小细节。y数组在重复使用时一定要清空,看那个line25 +k就明白了 ,cnt也要清空,为什么就不说了
- #include<bits/stdc++.h>
- using namespace std;
- typedef long long ll;
- template<typename T>inline char MAX(T&A,T B){return A<B?(A=B,):;}
- template<typename T>inline char MIN(T&A,T B){return A>B?(A=B,):;}
- const int N=+;
- char s[N];
- int n,m;
- ll ans;
- int sa[N],rk[N],x[N],y[N],cnt[N],h[N],p;
- inline void build(){
- memset(cnt,,sizeof cnt);memset(y,,sizeof y);//
- for(register int i=;i<=n;++i)++cnt[x[i]=s[i]];
- for(register int i=;i<=m;++i)cnt[i]+=cnt[i-];
- for(register int i=n;i;--i)sa[cnt[x[i]]--]=i;
- for(register int k=;k<n;k<<=,p=){
- for(register int i=n-k+;i<=n;++i)y[++p]=i;
- for(register int i=;i<=n;++i)if(sa[i]>k)y[++p]=sa[i]-k;
- for(register int i=;i<=m;++i)cnt[i]=;
- for(register int i=;i<=n;++i)++cnt[x[y[i]]];
- for(register int i=;i<=m;++i)cnt[i]+=cnt[i-];
- for(register int i=n;i;--i)sa[cnt[x[y[i]]]--]=y[i];
- swap(x,y);x[sa[]]=p=;
- for(register int i=;i<=n;++i)x[sa[i]]=y[sa[i-]]==y[sa[i]]&&y[sa[i-]+k]==y[sa[i]+k]?p:++p;
- if(p==n)break; m=p;
- }p=;
- // for(register int i=1;i<=n;++i)printf("%d %d\n",i,x[i]);
- for(register int i=;i<=n;h[x[i]]=p,p?--p:,++i)while(s[i+p]==s[sa[x[i]-]+p]&&++p);
- }
- inline void search(int k){
- int l=sa[],r=sa[];
- for(register int i=;i<=n;++i){
- if(h[i]<k){r-l>=k?++ans:;l=r=sa[i];}
- MIN(l,sa[i]),MAX(r,sa[i]);
- }
- r-l>=k?++ans:;
- }
- int main(){
- while(~scanf("%s",s+)){
- if(s[]=='#')break;
- n=strlen(s+),m=,ans=,p=,build();
- for(register int i=;i<=n/;++i)search(i);
- printf("%lld\n",ans);
- }
- return ;
- }
hdu3518 Boring Counting[后缀排序]的更多相关文章
- hdu3518 Boring counting(后缀数组)
Boring counting 题目传送门 解题思路 后缀数组.枚举每种长度,对于每个字符串,记录其最大起始位置和最小起始位置,比较是否重合. 代码如下 #include <bits/stdc+ ...
- hdu3518 Boring counting
地址:http://acm.split.hdu.edu.cn/showproblem.php?pid=3518 题目: Boring counting Time Limit: 2000/1000 MS ...
- [HDU3518]Boring counting(后缀数组)
传送门 求出现超过1次的不重叠子串的个数 根据论文中的方法. 枚举子串的长度 k. 用 k 给 height 数组分组,每一组求解,看看当前组的位置最靠后的后缀和位置最靠前的后缀所差个数是否大于长度, ...
- hdu 3518 Boring counting 后缀数组LCP
题目链接 题意:给定长度为n(n <= 1000)的只含小写字母的字符串,问字符串子串不重叠出现最少两次的不同子串个数; input: aaaa ababcabb aaaaaa # output ...
- hdu 3518 Boring counting 后缀数组基础题
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission( ...
- hdu 3518 Boring counting 后缀数组
题目链接 根据height数组的性质分组计算. #include <iostream> #include <vector> #include <cstdio> #i ...
- hdu 3518 Boring counting 后缀数组 height分组
题目链接 题意 对于给定的字符串,求有多少个 不重叠的子串 出现次数 \(\geq 2\). 思路 枚举子串长度 \(len\),以此作为分界值来对 \(height\) 值进行划分. 显然,对于每一 ...
- 后缀数组 --- HDU 3518 Boring counting
Boring counting Problem's Link: http://acm.hdu.edu.cn/showproblem.php?pid=3518 Mean: 给你一个字符串,求:至少出 ...
- Boring counting HDU - 3518 (后缀数组)
Boring counting \[ Time Limit: 1000 ms \quad Memory Limit: 32768 kB \] 题意 给出一个字符串,求出其中出现两次及以上的子串个数,要 ...
随机推荐
- tomcat报错: Error parsing HTTP request header
Error parsing HTTP request header 在服务器上面集成项目的时候,tomcat报错,在往上面查找是因为eclipse运行的tomcat和服务器上面的tomcat版本不一致 ...
- IOS研究之网络编程(二)-Cocoa Streams使用具体解释
本文以及相关的系列文章是我总结的iOS网络开发方面的知识点,本文是第二篇,主要分析了Cocoa Streams中的几个重要类 Cocoa Streams实际上是Objective-C对CFNet ...
- WikiCFP--A Wiki for Calls For Papers
WikiCFP--A Wiki for Calls For Papers ---->www.wikicfp.com/cfp/
- 汉字unicode码表范围和常用汉字unicode码
utf-8吗表中所有汉字的区间的正则表达式[\u4e00-\u9fa5] 汉字常用字unicode吗表String base ="\u7684\u4e00\u4e86\u662f\u6211 ...
- 【GoldenGate】使用OGG,两个Oracle库之间单向同步数据
************************************************************************ ****原文:blog.csdn.net/clark_ ...
- Centos 6.X noVNC+websockify 实现webvnc
文章参考:https://github.com/kanaka/noVNC http://www.cnblogs.com/yanghuahui/p/3574388.html 工作原理: noVNC 可以 ...
- 2014年java软件project师面试题收集
如果页面中于五个li标签.写个js使点击每个li返回他的index <!doctype html> <html> <head> <style> li{c ...
- 【Unity 3D】学习笔记三十:游戏元素——游戏地形
游戏地形 在游戏的世界中,必然会有非常多丰富多彩的游戏元素融合当中. 它们种类繁多.作用也不大同样.一般对于游戏元素可分为两种:经经常使用.不经经常使用.经常使用的元素是游戏中比較重要的元素.一般须要 ...
- 仿易讯clientloading效果
以下来实现一个loading效果.详细效果例如以下: 首先对这个效果进行拆分,它由以下部分组成: 1 一个"闪电"样式的图案. 2 "闪电"图案背后是一个圆角矩 ...
- 关于mongodb创建索引的一些经验总结(转)
查看语句执行计划: explain() 在mongodb3+版本后输出格式发生改变: 详情参见:https://docs.mongodb.com/v3.0/reference/method/curso ...