后缀数组+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;
}

最新文章

  1. node10-mongoose
  2. 对Raphael画图标的一个jquery简单封装
  3. Web大文件下载控件(down2)-示例更新-Xproer.HttpDownloader
  4. Asp.net 页面访问模板页的属性
  5. Protocol Buffers介绍
  6. 20145305 《Java程序设计》实验四
  7. 02_setter注入
  8. HDOJ(HDU) 2520 我是菜鸟,我怕谁(等差数列)
  9. ssh整合web.xml过滤器和监听器的配置 .
  10. XHTML表格
  11. 三、VueJs 填坑日记之项目文件认识
  12. 2018年多校第四场第二题 B. Harvest of Apples hdu6333
  13. centos7下使用rpm包安装clickhouse
  14. JavaScript中的BOM和DOM
  15. Luogu4338 ZJOI2018 历史 LCT、贪心
  16. ERP完善合同起草(二十八)
  17. Java基础知识(JAVA中String、StringBuffer、StringBuilder类的区别)
  18. Python高效编程技巧
  19. TCP和UDP协议的比较
  20. Web项目MySQL配置文件运维

热门文章

  1. Servlet 知识点 中文乱码的本质与解决
  2. vue组件实现查看大图效果
  3. vue2.0 移动端,下拉刷新,上拉加载更多插件 转:
  4. swift -基础语法
  5. 假期训练五(poj-1077bfs+康拓展开,hdu-2577dp)
  6. IntelliJ IDEA 2017版 编译器使用学习笔记(十) (图文详尽版);IDE快捷键使用;IDE关联一切
  7. Linux四剑客find/grep/awk/sed
  8. 开机logo以及两种修改开机动画方法
  9. 【慕课网实战】Spark Streaming实时流处理项目实战笔记六之铭文升级版
  10. Redis集群master选举时长测试