本题就是求重复数最多的字典序最小的$runs$,如果重复数为1,那么做法显然,然后只考虑重复数大于1的情况。

从小到大枚举长度$len$,对于每个关键点$x=i\times len$,有且仅有一个长度为$len$的串经过它。

算出$x$与$x+len$的最长公共前缀$A$和最长公共后缀$B$后,贡献为$\lfloor\frac{A+B-1}{len}\rfloor+1$。

对于方案,可以暴力枚举所有可行起点,因为极大$runs$的总个数是$O(n)$的。

时间复杂度$O(n\log^2n)$。

#include<cstdio>
#include<cstring>
typedef unsigned long long ll;
const int N=100010,D=13331;
int T,n,m,i,j,k,x,y,A,B,L,ans,st,en;char a[N];ll pow[N],f[N];
inline ll hash(int l,int r){return f[r]-f[l-1]*pow[r-l+1];}
inline int min(int a,int b){return a<b?a:b;}
inline int lcp(int x,int y){
if(a[x]!=a[y])return 0;
int l=2,r=min(n-x,n-y)+1,mid,t=1;
while(l<=r){
mid=(l+r)>>1;
if(hash(x,x+mid-1)==hash(y,y+mid-1))l=(t=mid)+1;else r=mid-1;
}
return t;
}
inline int lcs(int x,int y){
int l=2,r=x,mid,t=1;
while(l<=r){
mid=(l+r)>>1;
if(hash(x-mid+1,x)==hash(y-mid+1,y))l=(t=mid)+1;else r=mid-1;
}
return t;
}
inline void up(int x,int y){
if(k>ans){ans=k,st=x,en=y;return;}
int l0=en-st+1,l1=y-x+1,t=min(lcp(x,st),min(l0,l1));
if((t<l1?a[x+t]:0)<(t<l0?a[st+t]:0))st=x,en=y;
}
int main(){
scanf("%d",&T);
for(pow[0]=i=1;i<N;i++)pow[i]=pow[i-1]*D;
while(T--){
scanf("%s",a+1);n=strlen(a+1);
for(ans=i=st=en=1;i<=n;i++)if(a[i]<a[st])st=en=i;
for(i=1;i<=n;i++)f[i]=f[i-1]*D+a[i];
for(i=1;i+i<=n;i++)for(j=i;j<=n;j+=i){
x=j+i;
if(x>n)break;
if(a[j]!=a[x])continue;
A=lcp(j,x),B=lcs(j,x),k=(A+B-1)/i+1;
if(k>=ans&&k>1)for(L=k*i,y=j-B+1;y+L<=i+j+A;y++)up(y,y+L-1);
}
for(i=st;i<=en;i++)putchar(a[i]);puts("");
}
return 0;
}

  

最新文章

  1. Mac OS X 上安装 ASP.NET 5
  2. jQuery实现侧边导航栏效果
  3. HDU 1513 Palindrome
  4. java:定义线程
  5. IntelliJ IDEA使用之快捷键
  6. -_-#【JS】HTML5 API
  7. 对于IE6及以下版本的处
  8. debian install &amp; configure(2)-drivers-nvidia
  9. MySQL引擎的相关知识
  10. dos下的cd指令
  11. 关于tomcat的Unsupported major.minor version 51.0问题记录
  12. C# 使用 HttpClient 调用 WebService 提示 NoSOAPAction
  13. git:当本地分支中的代码和develop分支上有很多冲突,希望删掉本地分支,重新建立新的分支,怎么解决?
  14. Java基础教程(9)--流程控制
  15. struts1和struts2比较
  16. imperva配置文件的导入导出
  17. python WSGI框架详解
  18. python爬虫:爬取网站视频
  19. 【DFS】【贪心】Codeforces Round #411 (Div. 1) C. Ice cream coloring
  20. 08-spring学习-annotation配置

热门文章

  1. 384. Shuffle an Array
  2. NYOJ之水仙花数
  3. Linux 通过os进程pid找到端口号
  4. JavaScript 火花效果
  5. 关于python性能提升的一些方案(上)
  6. OCJP(1Z0-851) 模拟题分析(五)over
  7. 扩展LV
  8. JavaScript高级程序设计 读书笔记
  9. hdu 4045 2011北京赛区网络赛F 组合数+斯特林数 ***
  10. 如何学习FPGA?FPGA学习必备的基础知识