CSU-1632 Repeated Substrings[后缀数组求重复出现的子串数目]
评测地址:https://cn.vjudge.net/problem/CSU-1632
Description
求字符串中所有出现至少2次的子串个数
Input
第一行为一整数T(T<=10)表示用例组数,每组用例占一行为一个长度不超过100000的字符串
Output
对于每组用例,输出该串中所有出现至少两次的子串个数
Sample Input
3
aabaab
aaaaa
AaAaA
Sample Output
5
4
5
Solution
Ans=sum(max(height(i)-height(i-1),0))
#include<cstdio>
#include<cstring>
using namespace std;
const int N=1e5+;
int T,n,ans,c[N],sa[N],tsa[N],trank[N],rank[N],h[N];
char s[N];
void DA(int maxx=){
memset(c,,sizeof c);int p;
for(int i=;i<=n;i++) c[rank[i]=s[i]]++;
for(int i=;i<=maxx;i++) c[i]+=c[i-];
for(int i=n;i;i--) sa[c[rank[i]]--]=i;
trank[sa[]]=p=;
for(int i=;i<=n;i++){
if(rank[sa[i]]!=rank[sa[i-]]) p++;
trank[sa[i]]=p;
}
for(int i=;i<=n;i++) rank[i]=trank[i];
for(int k=;p<n;k<<=,maxx=p){
p=;
for(int i=n-k+;i<=n;i++) tsa[++p]=i;
for(int i=;i<=n;i++) if(sa[i]>k) tsa[++p]=sa[i]-k;
memset(c,,sizeof c);
for(int i=;i<=n;i++) trank[i]=rank[tsa[i]];
for(int i=;i<=n;i++) c[trank[i]]++;
for(int i=;i<=maxx;i++) c[i]+=c[i-];
for(int i=n;i;i--) sa[c[trank[i]]--]=tsa[i];
trank[sa[]]=p=;
for(int i=;i<=n;i++){
if(rank[sa[i]]!=rank[sa[i-]]||rank[sa[i]+k]!=rank[sa[i-]+k]) p++;
trank[sa[i]]=p;
}
for(int i=;i<=n;i++) rank[i]=trank[i];
}
for(int i=,k=;i<=n;i++){
int j=sa[rank[i]-];
while(s[i+k]==s[j+k]) k++;
h[rank[i]]=k;if(k>)k--;
}
}
void GO(){
ans=;
for(int i=;i<=n;i++) if(h[i]>h[i-]) ans+=h[i]-h[i-];
printf("%d\n",ans);
}
int main(){
scanf("%d",&T);
while(T--){
scanf("%s",s+);n=strlen(s+);
DA();
GO();
}
return ;
}
CSU-1632 Repeated Substrings[后缀数组求重复出现的子串数目]的更多相关文章
- UVALive - 6869 Repeated Substrings 后缀数组
题目链接: http://acm.hust.edu.cn/vjudge/problem/113725 Repeated Substrings Time Limit: 3000MS 样例 sample ...
- poj3261 后缀数组求重复k次可重叠的子串的最长长度
Milk Patterns Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 13669 Accepted: 6041 Ca ...
- poj2774 Long Long Message 后缀数组求最长公共子串
题目链接:http://poj.org/problem?id=2774 这是一道很好的后缀数组的入门题目 题意:给你两个字符串,然后求这两个的字符串的最长连续的公共子串 一般用后缀数组解决的两个字符串 ...
- POJ - 3415 Common Substrings(后缀数组求长度不小于 k 的公共子串的个数+单调栈优化)
Description A substring of a string T is defined as: T( i, k)= TiTi+1... Ti+k-1, 1≤ i≤ i+k-1≤| T|. G ...
- spoj 694. Distinct Substrings 后缀数组求不同子串的个数
题目链接:http://www.spoj.com/problems/DISUBSTR/ 思路: 每个子串一定是某个后缀的前缀,那么原问题等价于求所有后缀之间的不相同的前缀的个数.如果所有的后缀按照su ...
- Maximum repetition substring (poj3693 后缀数组求重复次数最多的连续重复子串)
Maximum repetition substring Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 6328 Acc ...
- poj2774 后缀数组 求最长公共子串
Reference:IOI2009论文 http://www.cnblogs.com/ziyi--caolu/p/3192731.html #include "stdio.h" # ...
- Long Long Message (poj2774 后缀数组求最长公共子串)
Long Long Message Time Limit: 4000MS Memory Limit: 131072K Total Submissions: 19206 Accepted: 79 ...
- poj 1743 男人八题之后缀数组求最长不可重叠最长重复子串
Musical Theme Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 14874 Accepted: 5118 De ...
随机推荐
- python 使用 urllib2
使用basic auth 的3种方式 1. 设置header import urllib2 from base64 import encodestring headers = {'Content-Ty ...
- 【CI】系列三.宿主机KVM配置及vdi与vmdk格式转换等
前提:宿主机需要支持虚拟化,如果未打开,则需要重启机器,在bois中打开该项: Ubuntu 及 KVM 相关主要参考官方 https://wiki.ubuntu.com/kvm 另外也可参考该页面: ...
- 模板:什么是Traits
Traits不是一种语法特性,而是一种模板编程技巧.Traits在C++标准库,尤其是STL中,有着不可替代的作用. 如何在编译期间区分类型 下面我们看一个实例,有四个类,Farm.Worke ...
- lodash random
_.random([min=0], [max=1], [floating]) 产生一个包括 min 与 max 之间的数. 如果只提供一个参数返回一个0到提供数之间的数. 如果 floating 设为 ...
- CEF与JavaScript交互读取电脑信息
CefSharp中c#和JavaScript交互读取电脑信息 介绍 CEF是由Marshall Greenblatt于2008年创建的基于Google Chromium的BSD许可开源项目.与主要关注 ...
- HIVE中join、semi join、outer join
补充说明 left outer join where is not null与left semi join的联系与区别:两者均可实现exists in操作,不同的是,前者允许右表的字段在select或 ...
- 利用Python读取文件名并生成txt文件——以图片文件为例
效果如下: 代码: import os class ReadImageName(): def __init__(self): self.path = '.' def readname(self): f ...
- Atitit.协议的转换smb2http 原理
Atitit.协议的转换smb2http 原理 1. 协议的转换原理 stream的转换.. 2. 常用协议转换的情形 android通过SMB访问局域网共享文件 作者:: ★(attilax)&g ...
- js将用户上传gif动图分解成多张帧图片
js将用户上传gif动图分解成多张帧图片 写在前面 工作中遇到一个这么一个需求:这是一个多图上传的场景,如果用户上传选择多张图片,则上传后直接展示多张图片,如果上传的图片是gif动图,则需要分解这张动 ...
- varnish学习笔记
varnish cache是一款开源的高性能的缓存server.和老牌的Squid对照有例如以下长处. 1:varnish是基于内存缓存数据的,所以处理速度比Squid要快. 2:varnish支持更 ...