求形如ABA的子串个数,同bzoj2119,题解看这里
tips:没说全是小写字母你就别换成int了。。。无谓的WA三发

#include <cstdio>
#include <cstring>
#include <algorithm>
#define ll long long
#define N 50010
int n,k,Log[N];
ll ans=0;
char s[N];
inline int min(int x,int y){return x<y?x:y;}
struct SA{char a[N];int rank[N<<1],rank1[N],sa[N],h[N],count[N],tmp[N];int m,st[N][18];void init(){m=300;for(int i=1;i<=m;++i) count[i]=0;for(int i=1;i<=n;++i) count[a[i]]=1;for(int i=1;i<=m;++i) count[i]+=count[i-1];for(int i=n;i>=1;--i) rank[i]=count[a[i]];int k=0;for(int p=1;k!=n;p<<=1,m=k){for(int i=1;i<=m;++i) count[i]=0;for(int i=1;i<=n;++i) count[rank[i+p]]++;for(int i=1;i<=m;++i) count[i]+=count[i-1];for(int i=n;i>=1;--i) tmp[count[rank[i+p]]--]=i;for(int i=1;i<=m;++i) count[i]=0;for(int i=1;i<=n;++i) count[rank[tmp[i]]]++;for(int i=1;i<=m;++i) count[i]+=count[i-1];for(int i=n;i>=1;--i) sa[count[rank[tmp[i]]]--]=tmp[i];memcpy(rank1,rank,sizeof(rank1));rank[sa[1]]=k=1;for(int i=2;i<=n;++i){if(rank1[sa[i]]!=rank1[sa[i-1]]||rank1[sa[i]+p]!=rank1[sa[i-1]+p]) ++k;rank[sa[i]]=k;}}k=0;for(int i=1;i<=n;++i){if(rank[i]==1){h[1]=0;continue;}if(i==1||h[rank[i-1]]<=1) k=0;if(k) --k;while(a[i+k]==a[sa[rank[i]-1]+k]) ++k;h[rank[i]]=k;       }for(int i=1;i<=n;++i) st[i][0]=h[i];for(int i=1;i<=Log[n];++i)for(int j=1;j<=n;++j)if(j+(1<<i-1)<=n) st[j][i]=min(st[j][i-1],st[j+(1<<i-1)][i-1]);}int lcp(int x,int y){int l=rank[x],r=rank[y];if(l>r) std::swap(l,r);l++;int t=Log[r-l+1];return min(st[l][t],st[r-(1<<t)+1][t]);}
}A,B;
void solve(int len){for(int i=1;i+len+k<=n;i+=len){int j=i+len+k;int r=A.lcp(i,j),l=B.lcp(n+1-i+1,n+1-j+1);if(r>len) r=len;if(l>len-1) l=len-1;if(l+r>=len) ans+=l+r-len+1;}
}
int main(){
//  freopen("a.in","r",stdin);scanf("%d%s",&k,s+1);n=strlen(s+1);Log[0]=-1;for(int i=1;i<=n;++i) Log[i]=Log[i>>1]+1;for(int i=1;i<=n;++i) A.a[i]=s[i],B.a[i]=s[n-i+1];A.init();B.init();for(int i=1;i+i+k<=n;++i) solve(i);printf("%lld\n",ans);return 0;
}

bzoj2534 Uva10829L-gap字符串(SA+lcp同bzoj2119)相关推荐

  1. BZOJ3172 [Tjoi2013]单词 字符串 SA ST表

    原文链接http://www.cnblogs.com/zhouzhendong/p/9026543.html 题目传送门 - BZOJ3172 题意 输入$n(n\leq 200)$个字符串,保证长度 ...

  2. BZOJ3230 相似子串 字符串 SA ST表

    原文链接http://www.cnblogs.com/zhouzhendong/p/9033092.html 题目传送门 - BZOJ3230 题意 给定字符串$s$.长度为$n$. 现在有$Q$组询 ...

  3. P4094 [HEOI2016/TJOI2016]字符串 [SA + 主席树]

    传送门 转换为判断,二分一个len,判断后缀起点在a -- b-mid+1 直接存不存在S, 使lcp(S,c)>= len,我们发现rank[S] 一定在c左右的一个范围内, 我们二分这个范围 ...

  4. 主席树 + 后缀数组求LCP + 二分套二分 ---- P4094 [HEOI2016/TJOI2016]字符串

    题目链接 题目大意: 解题思路: 设我们的答案为midmidmid(注意这里有坑是[a,b][a,b][a,b]的所有子串和[c,d][c,d][c,d]这个子串的最长lcplcplcp),那么我们会 ...

  5. 后缀数组 + Hash + 二分 or Hash + 二分 + 双指针 求 LCP ---- 2017icpc 青岛 J Suffix (假题!!)

    题目链接 题目大意: 就是给你n个串每个串取一个后缀,要求把串拼起来要求字典序最小!! sum_length_of_n≤5e5sum\_length\_of\_n\leq 5e5sum_length_ ...

  6. YbtOJ-相似子串【SA,RMQ,二分】

    正题 题目大意 给出一个长度为nnn的字符串,两个串相似当且仅当可以通过每种字符置换使得它们相同. qqq次询问这个字符串所有子串中和这个串中sl,rs_{l,r}sl,r​子串有多少个相似的. 1≤ ...

  7. 基础省选+NOI-第6部分 字符串

    1.Kmp KMP算法 KMP算法_哔哩哔哩_bilibili KMP算法计算next函数值(教材版,超简单!) KMP算法计算next函数值(教材版,超简单!)_哔哩哔哩_bilibili KMP算 ...

  8. 2020多校第1场A题【后缀数组+思维】

    1.首先我们发现每个后缀开头一定是0,而且开头都是0..[若干个1]..0这种格式,按照字典序的排序方式那么如果两个0之间的1越少字典序就越小.例如aaaaab=>011110,aaab=> ...

  9. POJ 2217:Secretary(后缀数组)

    题目大意:求两个字符串的公共子串. 分析: 模板题,将两个字符串接起来用不会出现的字符分割,然后求分属两个字符串的相邻后缀lcp的最大值即可. 代码: program work; typearr=ar ...

最新文章

  1. 二本毕业后3年发两篇Nature引热议,他此前研究刷新世界纪录
  2. ZooKeeper 定位:能解决什么问题?不能解决什么问题?
  3. Libevent:6辅助函数以及类型
  4. DropDownList and ListBox 两级联动菜单
  5. python取文件后缀
  6. 系统软硬件测试工具介绍
  7. 超详细|开关电源电路图及原理讲解
  8. 企业微信自建应用手动授权,获取用户详细信息
  9. xlistview的使用
  10. ACE的CDR中的字节对齐问题
  11. Open Replicator
  12. Docker容器技术 笔记
  13. 中山大学曾兆阳_官居几品怎么打压势力
  14. Git 右键不显示Git功能图标
  15. pdf转txt java_pdf转换txt怎么操作?pdf文件可以转换成txt文件吗?
  16. android 常用加密,分享一下Android各种类型的加密
  17. SAP-工艺路线相关的表的关联关系
  18. Tomcat8启动不了的问题
  19. ZOJ 3494 BCD code
  20. 小程序之mpvue使用

热门文章

  1. 【JAVA】-- 期末考试复习题含答案(每章对应题、选择、填空、简答、编程)(上)
  2. 08-认识margin
  3. python中的怎么打出来_如何在Python中打印上标?
  4. 怎样度过人生的低潮期?
  5. 如何在抖音官网链接中一键复制微信号跳转微信
  6. 感谢折磨你的人[三]
  7. 风口的猪(小米实习生招聘)
  8. 华为超融合FusionCube解决方案笔记
  9. 超融合与传统架构特性及收益详细对比
  10. 2014年传智Itcast C++培训3期视频全套