博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hdu 2459 Maximum repetition substring(后缀数组)
阅读量:5341 次
发布时间:2019-06-15

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

题目链接:

题意:

让你找一个重复最多的子串,并且输出。

题解:

这个是论文题,看的,不是很理解为什么这样就能完全找完,当作结论使吧。

1 #include
2 #define F(i,a,b) for(int i=a;i<=b;++i) 3 using namespace std; 4 namespace suffixarray{ 5 #define FN(n) for(int i=0;i
=0;i--)sa[--c[x[i]]]=i;11 for(int k=1,p;p=0,k<=n;k=p>=n?N:k<<1,m=p){12 for(int i=n-k;i
=k)y[p++]=sa[i]-k;14 FN(m)c[i]=0;FN(n)c[x[y[i]]]++;FN(m)c[i+1]+=c[i];15 for(int i=n-1;i>=0;i--)sa[--c[x[y[i]]]]=y[i];16 swap(x,y),p=1,x[sa[0]]=0;17 for(int i=1;i
r)swap(l,r);39 l++;40 int k=31-__builtin_clz(r-l+1);41 return min(f[l][k],f[r-(1<
=0&&r%l)step+=(find(k,k+l)>=r);57 if(step>mx)58 {59 mx=step,cnt=0;60 ans[cnt++]=l;61 }else if(step==mx)ans[cnt++]=l;62 }63 int tmp=-1,st;64 for(int i=1;i<=len&&tmp==-1;i++)F(j,0,cnt-1)65 {66 int l=ans[j];67 if(find(sa[i],sa[i]+l)>=(mx-1)*l)68 {69 tmp=l,st=sa[i];70 break;71 }72 }73 printf("Case %d: ",++cas); 74 for(int i=st,j=0;j
View Code

 

转载于:https://www.cnblogs.com/bin-gege/p/6367338.html

你可能感兴趣的文章
线程安全问题
查看>>
下拉刷新
查看>>
linux的子进程调用exec( )系列函数
查看>>
MSChart的研究
查看>>
C# 索引器
查看>>
MySQLdb & pymsql
查看>>
zju 2744 回文字符 hdu 1544
查看>>
delphi 内嵌汇编例子
查看>>
【luogu P2298 Mzc和男家丁的游戏】 题解
查看>>
前端笔记-bom
查看>>
MATLAB作图方法与技巧(一)
查看>>
上海淮海中路上苹果旗舰店门口欲砸一台IMAC电脑维权
查看>>
Google透露Android Market恶意程序扫描服务
查看>>
给mysql数据库字段值拼接前缀或后缀。 concat()函数
查看>>
迷宫问题
查看>>
【FZSZ2017暑假提高组Day9】猜数游戏(number)
查看>>
泛型子类_属性类型_重写方法类型
查看>>
eclipse-将同一个文件分屏显示
查看>>
对闭包的理解
查看>>
练习10-1 使用递归函数计算1到n之和(10 分
查看>>