后缀数组+ST表。

代填的坑。

\(Code\ Below:\)

#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int maxn=100000+10;
int n,m,L,h[maxn],Min[maxn][18],sa[maxn],tax[maxn],rnk[maxn],tp[maxn];
char s[maxn];ll ans; void SA(){
int i,k,p;m=128;
for(i=1;i<=n;i++) rnk[i]=s[i];
for(i=1;i<=m;i++) tax[i]=0;
for(i=1;i<=n;i++) tax[rnk[i]]++;
for(i=1;i<=m;i++) tax[i]+=tax[i-1];
for(i=n;i>=1;i--) sa[tax[rnk[i]]--]=i;
for(k=1,p=0;k<n;m=p,k<<=1){
p=0;
for(i=n-k+1;i<=n;i++) tp[++p]=i;
for(i=1;i<=n;i++) if(sa[i]>k) tp[++p]=sa[i]-k;
for(i=1;i<=m;i++) tax[i]=0;
for(i=1;i<=n;i++) tax[rnk[i]]++;
for(i=1;i<=m;i++) tax[i]+=tax[i-1];
for(i=n;i>=1;i--) sa[tax[rnk[tp[i]]]--]=tp[i];
swap(rnk,tp);rnk[sa[1]]=p=1;
for(i=2;i<=n;i++) rnk[sa[i]]=(tp[sa[i-1]]==tp[sa[i]]&&tp[sa[i-1]+k]==tp[sa[i]+k])?p:++p;
}
} void getheight(){
int i,j,p=0;
for(i=1;i<=n;i++) rnk[sa[i]]=i;
for(i=1;i<=n;i++){
j=sa[rnk[i]-1];if(p) p--;
while(s[i+p]==s[j+p]) p++;
h[rnk[i]]=p;
}
for(i=1;i<=n;i++) Min[i][0]=h[i];
for(j=1;j<18;j++)
for(i=1;i+(1<<j)-1<=n;i++) Min[i][j]=min(Min[i][j-1],Min[i+(1<<(j-1))][j-1]);
} int query(int l,int r){
int k=log2(r-l+1);
return min(Min[l][k],Min[r-(1<<k)+1][k]);
} int LCP(int x,int y){
int l=rnk[x],r=rnk[y];
if(l==r) return n-sa[l]+1;
if(l>r) swap(l,r);
return query(l+1,r);
} int LCS(int x,int y){
return LCP(2*n-x+2,2*n-y+2);
} int main()
{
int T;
scanf("%d",&T);
for(int Case=1;Case<=T;Case++){
#define mem(x) memset(x,0,sizeof(x))
mem(s);mem(sa);mem(tax);mem(rnk);mem(tp);ans=0;
scanf("%d%s",&L,s+1);n=strlen(s+1);
for(int i=1;i<=n;i++) s[2*n-i+2]=s[i];
s[n+1]='$';n=2*n+1;
SA();getheight();n/=2;
int x,y,lcp,lcs,num;
for(int len=1;len+L<=n;len++)
for(int i=1;i+len+L<=n;i+=len){
x=i;y=i+len+L;
lcp=min(LCP(x,y),len);
lcs=min(LCS(x,y),len);
num=lcp+lcs-(lcp>0&&lcs>0);
ans+=max(num-len+1,0);
}
printf("Case %d: %lld\n",Case,ans);
}
return 0;
}

UVA10829 L-Gap Substrings(后缀数组+ST表)的更多相关文章

  1. SPOJ 687 Repeats(后缀数组+ST表)

    [题目链接] http://www.spoj.com/problems/REPEATS/en/ [题目大意] 求重复次数最多的连续重复子串的长度. [题解] 考虑错位匹配,设重复部分长度为l,记s[i ...

  2. POJ 3693 Maximum repetition substring(后缀数组+ST表)

    [题目链接] poj.org/problem?id=3693 [题目大意] 求一个串重复次数最多的连续重复子串并输出,要求字典序最小. [题解] 考虑错位匹配,设重复部分长度为l,记s[i]和s[i+ ...

  3. BZOJ_4516_[Sdoi2016]生成魔咒_后缀数组+ST表+splay

    BZOJ_4516_[Sdoi2016]生成魔咒_后缀数组+ST表+splay Description 魔咒串由许多魔咒字符组成,魔咒字符可以用数字表示.例如可以将魔咒字符 1.2 拼凑起来形成一个魔 ...

  4. POJ3693 Maximum repetition substring [后缀数组 ST表]

    Maximum repetition substring Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 9458   Acc ...

  5. Maximum repetition substring(POJ - 3693)(sa(后缀数组)+st表)

    The repetition number of a string is defined as the maximum number \(R\) such that the string can be ...

  6. 【BZOJ-4310】跳蚤 后缀数组 + ST表 + 二分

    4310: 跳蚤 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 180  Solved: 83[Submit][Status][Discuss] De ...

  7. UVA 11475 Extend to Palindrome(后缀数组+ST表)

    [题目链接] http://acm.hust.edu.cn/vjudge/problem/27647 [题目大意] 给出一个字符串,要求在其后面添加最少的字符数,使得其成为一个回文串.并输出这个回文串 ...

  8. BZOJ 4556 [Tjoi2016&Heoi2016]字符串 ——后缀数组 ST表 主席树 二分答案

    Solution 1: 后缀数组暴力大法好 #include <map> #include <cmath> #include <queue> #include &l ...

  9. 2019CCPC网络赛 C - K-th occurrence HDU - 6704(后缀数组+ST表+二分+主席树)

    题意 求区间l,r的子串在原串中第k次出现的位置. 链接:https://vjudge.net/contest/322094#problem/C 思路 比赛的时候用后缀自动机写的,TLE到比赛结束. ...

随机推荐

  1. [SQL]查询最新的数据

    在设计数据库的时候,把数据的跟新,删除都是软操作,就是都是变成了增加,也是会需要读取最新的那条数据 ' 获取最新时间的数据 Select a.* FROM SortInfo a,(SELECT SnS ...

  2. spring学习 四 对象的创建

    spring中,有三种创建对象的方式 (1)构造创建 (2)实例工厂构造 (3)静态工厂构造 一  构造器创建 在构造器创建对象时,有无参构造和有参构造 两种 (1)在spring中,默认的是无参构造 ...

  3. Opencv基本数据类型

    1.OpenCV中数据类型和常用数据类型对应 Mat<uchar>                            CV_8U Mat<char>            ...

  4. Spring boot自动设置包依赖,根本不用记,

    maven有和多依赖包,每次搭建都很麻烦,其实IDE ,有个小技巧,就是如图所示,你给需要的技术,加入进去,自动就会生成包和相关依赖,根本无需自己配置

  5. SpringBoot初探

    一:项目创建 个人用的是IDEA来做Demo的: 1.先创建一个空项目,然后创建一个基于Maven的java application项目: 2.创建好后配置pom.xml文件并最终reimport & ...

  6. RNN入门

    RNN入门学习 原文地址:http://blog.csdn.net/hjimce/article/details/49095371 作者:hjimce 一.相关理论 RNN(Recurrent Neu ...

  7. VIP之FrameBuffer

     2.VIP Frame Buffer 1.原来我是一直存在一个疑惑,demo上说VIP Frame Buffer输出是固定的60fps,但是在NiosII的程序中我没有找到设置输出为60fps的设置 ...

  8. jquery的call()和apply()方法

    call方法: 语法:call([thisObj[,arg1[, arg2[,   [,.argN]]]]]) 定义:调用一个对象的一个方法,以另一个对象替换当前对象. 说明: call 方法可以用来 ...

  9. js中的事件代理(委托)

    1,什么是事件委托:通俗的讲,事件就是onclick,onmouseover,onmouseout,等就是事件,委托呢,就是让别人来做,这个事件本来是加在某些元素上的,然而你却加到别人身上来做,完成这 ...

  10. 深入浅出javascript(八)this、call和apply

    _________此篇日志属于重要记录,长期更新__________ this,call,apply这三个是进阶JS的重要一步,需要详细的记录. ➢ this 一.作为对象的方法调用. 当函数作为对象 ...