裸的统计不同的重复出现子串(不重叠)种数的题。
多次使用后缀排序要注意小细节。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[后缀排序]的更多相关文章

  1. hdu3518 Boring counting(后缀数组)

    Boring counting 题目传送门 解题思路 后缀数组.枚举每种长度,对于每个字符串,记录其最大起始位置和最小起始位置,比较是否重合. 代码如下 #include <bits/stdc+ ...

  2. hdu3518 Boring counting

    地址:http://acm.split.hdu.edu.cn/showproblem.php?pid=3518 题目: Boring counting Time Limit: 2000/1000 MS ...

  3. [HDU3518]Boring counting(后缀数组)

    传送门 求出现超过1次的不重叠子串的个数 根据论文中的方法. 枚举子串的长度 k. 用 k 给 height 数组分组,每一组求解,看看当前组的位置最靠后的后缀和位置最靠前的后缀所差个数是否大于长度, ...

  4. hdu 3518 Boring counting 后缀数组LCP

    题目链接 题意:给定长度为n(n <= 1000)的只含小写字母的字符串,问字符串子串不重叠出现最少两次的不同子串个数; input: aaaa ababcabb aaaaaa # output ...

  5. hdu 3518 Boring counting 后缀数组基础题

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission( ...

  6. hdu 3518 Boring counting 后缀数组

    题目链接 根据height数组的性质分组计算. #include <iostream> #include <vector> #include <cstdio> #i ...

  7. hdu 3518 Boring counting 后缀数组 height分组

    题目链接 题意 对于给定的字符串,求有多少个 不重叠的子串 出现次数 \(\geq 2\). 思路 枚举子串长度 \(len\),以此作为分界值来对 \(height\) 值进行划分. 显然,对于每一 ...

  8. 后缀数组 --- HDU 3518 Boring counting

    Boring counting Problem's Link:   http://acm.hdu.edu.cn/showproblem.php?pid=3518 Mean: 给你一个字符串,求:至少出 ...

  9. Boring counting HDU - 3518 (后缀数组)

    Boring counting \[ Time Limit: 1000 ms \quad Memory Limit: 32768 kB \] 题意 给出一个字符串,求出其中出现两次及以上的子串个数,要 ...

随机推荐

  1. 在windows下安装apidocjs

    1. 下载Node.js官方Windows版程序:   https://nodejs.org/download/   从0.6.1开始,Node.js在Windows平台上提供了两种安装方式,一是.M ...

  2. POJ 2985 Treap平衡树(求第k大的元素)

    这题也能够用树状数组做,并且树状数组姿势更加优美.代码更加少,只是这个Treap树就是求第K大元素的专家--所以速度比較快. 这个也是从那本红书上拿的模板--自己找了资料百度了好久,才理解这个Trea ...

  3. 创建自己的taglib 并打包入jar

    1. Create a TLD (tag library descriptor) file namedmy-tags.tld. For more information, see Creating a ...

  4. 规范-Git打标签与版本控制

    Git打标签与版本控制规范 前言 本文适用于使用Git做VCS(版本控制系统)的场景. 用过Git的程序猿,都喜欢其分布式架构带来的commit快感.不用像使用SVN这种集中式版本管理系统,每一次提交 ...

  5. TP实例化模型的两种方式 M() D()

    TP框架中实例化模型的两种方式 #如果使用自己自定义的函数,那么就用D $mode=D('model'); #如果使用是系统自带的函数,那么就是用M $model=M('model');

  6. 【ASP.NET】巧用Cookie实战

    上篇介绍了究竟什么是Cookie.究竟是干什么用的,这篇博客具体具体的说一下.Cookie究竟怎样用. 首先建立如图所看到的的界面.通过该界面可登录到某个站点.详细要求例如以下: ·在首次登录后,将登 ...

  7. 限制UITextView的字数和字数监控,表情异常的情况和禁用表情

    限制UITextView的字数和字数监控,表情异常的情况和禁用表情   3523FD80CC4350DE0AE7F89A8532B9A8.png 因为字数占一个字符,表情占两个字符.你要是限制15个字 ...

  8. struts2 Eclipse 中集成strust2开发框架实例

    下面通过建立一个小的实例具体来说明Eclipse 集成struts2,以下实例采用的为 struts2 版本为 struts2 2.2.3.1 为应用. 1. 下载struts2的开发包 第一步: 在 ...

  9. Asp.Net Mvc: 浅析TempData机制

    一. Asp.Net Mvc中的TempData 在Asp.Net Mvc框架的ControllerBase中存在一个叫做TempData的Property,它的类型为TempDataDictiona ...

  10. 九度OJ 1158:买房子 (基础题)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:1801 解决:1096 题目描述: 某程序员开始工作,年薪N万,他希望在中关村公馆买一套60平米的房子,现在价格是200万,假设房子价格以每 ...