博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BZOJ 3473
阅读量:6305 次
发布时间:2019-06-22

本文共 1907 字,大约阅读时间需要 6 分钟。

思路:

CF原题

ZYF有题解

O(nlog^2n)

//By SiriusRen#include 
using namespace std;const int N=400050;int n,m,q,cntA[N],cntB[N],A[N],B[N],rk[N],ht[N],sa[N],tsa[N],f[N][20];int from[N],cnt[N],rec[N],tl[N],ans[N];char ch[N],s[N];void SA(){ for(int i=1;i<=n;i++)cntA[s[i]]++; for(int i=1;i<=256;i++)cntA[i]+=cntA[i-1]; for(int i=n;i;i--)sa[cntA[s[i]]--]=i; rk[sa[1]]=1; for(int i=2;i<=n;i++)rk[sa[i]]=rk[sa[i-1]]+(s[sa[i]]!=s[sa[i-1]]); for(int l=1;rk[sa[n]]
<<=1){ memset(cntA,0,sizeof(cntA)); memset(cntB,0,sizeof(cntB)); for(int i=1;i<=n;i++)cntA[A[i]=rk[i]]++,cntB[B[i]=(i+l<=n?rk[i+1]:0)]++; for(int i=1;i<=n;i++)cntA[i]+=cntA[i-1],cntB[i]+=cntB[i-1]; for(int i=n;i;i--)tsa[cntB[B[i]]--]=i; for(int i=n;i;i--)sa[cntA[A[tsa[i]]]--]=tsa[i]; rk[sa[1]]=1; for(int i=2;i<=n;i++)rk[sa[i]]=rk[sa[i-1]]+(A[sa[i]]!=A[sa[i-1]]||B[sa[i]]!=B[sa[i-1]]); } for(int i=1,j=0;i<=n;i++){ j=j?j-1:0; while(s[i+j]==s[sa[rk[i]-1]+j])j++; ht[rk[i]]=j; } for(int i=1;i<=n;i++)f[i][0]=ht[i]; for(int j=1;j<=19;j++) for(int i=1;i<=n;i++) f[i][j]=min(f[i][j-1],f[i+(1<<(j-1))][j-1]);}bool check(int pos,int len){ int l=pos,r=pos; for(int j=19;~j;j--){ if(l+1>=(1<
<
=len)l-=(1<
=len)r+=(1<
=l;}int main(){ scanf("%d%d",&m,&q); for(int i=1;i<=m;i++){ scanf("%s",ch); int t=strlen(ch); s[n++]=' '; for(int j=0;j
=q){ for(;k-(cnt[from[sa[t]]]==1)>=q;k-=(cnt[from[sa[t]]]==1),--cnt[from[sa[t++]]]); rec[i]=t; } } for(int i=1;i<=n;i++)if(from[sa[i]]){ int l=1,r=tl[from[sa[i]]]-sa[i],dt=0; while(l<=r){ int mid=(l+r)>>1; if(check(i,mid))dt=mid,l=mid+1; else r=mid-1; }ans[from[sa[i]]]+=dt; } for(int i=1;i<=m;i++)printf("%d ",ans[i]);}

 

转载于:https://www.cnblogs.com/SiriusRen/p/7101117.html

你可能感兴趣的文章
Visual Studio 15.4发布,新增多平台支持
查看>>
有赞透明多级缓存解决方案(TMC)设计思路
查看>>
如何设计高扩展的在线网页制作平台
查看>>
Git 2.5增加了工作树、改进了三角工作流、性能等诸多方面
查看>>
Swift 5将强制执行内存独占访问
查看>>
中台之上(二):为什么业务架构存在20多年,技术人员还觉得它有点虚?
查看>>
深度揭秘腾讯云低功耗广域物联网LPWAN 技术及应用
查看>>
与Jeff Sutherland谈敏捷领导力
查看>>
More than React(四)HTML也可以静态编译?
查看>>
React Native最佳学习模版- F8 App开源了
查看>>
云服务正在吞噬世界!
查看>>
阅读Android源码的一些姿势
查看>>
Web语义化标准解读
查看>>
一份代码构建移动、桌面、Web全平台应用
查看>>
高性能 Lua 技巧(译)
查看>>
区分指针、变量名、指针所指向的内存
查看>>
异步编程的世界
查看>>
最近话题火爆的四件事你知道不?
查看>>
SpringBoot整合MyBatis
查看>>
云计算产业如何率先推行信用管理?
查看>>