题目求最长的重复k次可重叠子串。

POJ1743同理。

  1. 二分枚举ans判定是否成立
  2. height分组,如果大于等于ans的组里的个数大于等于k-1,这个ans就可行
 #include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
#define MAXN 1000001 int wa[MAXN],wb[MAXN],wv[MAXN],ws[MAXN];
int cmp(int *r,int a,int b,int l){
return r[a]==r[b] && r[a+l]==r[b+l];
}
int sa[MAXN],rank[MAXN],height[MAXN];
void SA(int *r,int n,int m){
int *x=wa,*y=wb; for(int i=; i<m; ++i) ws[i]=;
for(int i=; i<n; ++i) ++ws[x[i]=r[i]];
for(int i=; i<m; ++i) ws[i]+=ws[i-];
for(int i=n-; i>=; --i) sa[--ws[x[i]]]=i; int p=;
for(int j=; p<n; j<<=,m=p){
p=;
for(int i=n-j; i<n; ++i) y[p++]=i;
for(int i=; i<n; ++i) if(sa[i]>=j) y[p++]=sa[i]-j;
for(int i=; i<n; ++i) wv[i]=x[y[i]];
for(int i=; i<m; ++i) ws[i]=;
for(int i=; i<n; ++i) ++ws[wv[i]];
for(int i=; i<m; ++i) ws[i]+=ws[i-];
for(int i=n-; i>=; --i) sa[--ws[wv[i]]]=y[i];
swap(x,y); x[sa[]]=; p=;
for(int i=; i<n; ++i) x[sa[i]]=cmp(y,sa[i-],sa[i],j)?p-:p++;
} for(int i=; i<n; ++i) rank[sa[i]]=i;
int k=;
for(int i=; i<n-; height[rank[i++]]=k){
if(k) --k;
for(int j=sa[rank[i]-]; r[i+k]==r[j+k]; ++k);
}
} int n,k,a[MAXN];
bool isok(int len){
int cnt=;
bool flag=;
for(int i=; i<=n; ++i){
if(height[i]>=len){
if(flag){
++cnt;
if(cnt+>=k) return ;
}else{
flag=;
cnt=;
if(cnt+>=k) return ;
}
}else{
flag=;
cnt=;
}
}
return ;
}
int main(){
int mx=;
scanf("%d%d",&n,&k);
for(int i=; i<n; ++i){
scanf("%d",a+i);
mx=max(mx,++a[i]);
}
a[n]=;
SA(a,n+,mx+);
int l=,r=n;
while(l<r){
int mid=l+r+>>;
if(isok(mid)) l=mid;
else r=mid-;
}
printf("%d",l);
return ;
}

最新文章

  1. Navigation Bar options for Android (based on photosomething project)
  2. ThinkPHP 关于namespace的事儿
  3. ruby使用DBI连接MySQL数据库发生异常:in `error&#39;: Can&#39;t connect to MySQL server on &#39;localhost&#39; (10061) (DBI::DatabaseError)
  4. JS操作select下拉框动态变动(创建/删除/获取)
  5. locale的设定及其LANG、LC_ALL、LANGUAGE环境变量的区别
  6. location对象及history对象
  7. RadioButtonList单选和RequiredFieldValidator验证是否选中
  8. UC编程之网络通信(TCP/UDP)
  9. 图片上传即时显示javascript代码
  10. c# 自定义多选下拉列表2
  11. IOS7学习之路八(iOS 禁止屏幕旋转的方法)
  12. PHP是什么文件? 如何打开?
  13. 优化算法系列-遗传算法(3)——NSGAII学习网址
  14. 【安卓进阶】Scroller理解与应用
  15. 如何设置访问内网web项目
  16. python关键字与标识符
  17. C语言基础:函数指针 分类: iOS学习 c语言基础 2015-06-10 21:55 15人阅读 评论(0) 收藏
  18. bin/hdfs dfs命令
  19. 20135313-exp2
  20. [微软官网]SQLSERVER的版本信息

热门文章

  1. Python 3基础教程6-for循环语句
  2. excel批量导入
  3. tomcat运行solr
  4. ansible自动安装rabbitmq
  5. 孤荷凌寒自学python第四天 安装python的其它IDE环境
  6. [C++] 拓展属性
  7. 【已解决】UBuntu16.04软件中心更新后只有桌面
  8. 第三方库的安装:Pangolin
  9. 阻塞&amp;&amp;非阻塞
  10. linux服务进程管理