POJ3261 Milk Patterns(二分+后缀数组)
2024-08-29 05:38:04
题目求最长的重复k次可重叠子串。
与POJ1743同理。
- 二分枚举ans判定是否成立
- 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 ;
}
最新文章
- Navigation Bar options for Android (based on photosomething project)
- ThinkPHP 关于namespace的事儿
- ruby使用DBI连接MySQL数据库发生异常:in `error&#39;: Can&#39;t connect to MySQL server on &#39;localhost&#39; (10061) (DBI::DatabaseError)
- JS操作select下拉框动态变动(创建/删除/获取)
- locale的设定及其LANG、LC_ALL、LANGUAGE环境变量的区别
- location对象及history对象
- RadioButtonList单选和RequiredFieldValidator验证是否选中
- UC编程之网络通信(TCP/UDP)
- 图片上传即时显示javascript代码
- c# 自定义多选下拉列表2
- IOS7学习之路八(iOS 禁止屏幕旋转的方法)
- PHP是什么文件? 如何打开?
- 优化算法系列-遗传算法(3)——NSGAII学习网址
- 【安卓进阶】Scroller理解与应用
- 如何设置访问内网web项目
- python关键字与标识符
- C语言基础:函数指针 分类: iOS学习 c语言基础 2015-06-10 21:55 15人阅读 评论(0) 收藏
- bin/hdfs dfs命令
- 20135313-exp2
- [微软官网]SQLSERVER的版本信息