博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[poj3261]Milk Patterns(后缀数组)
阅读量:4354 次
发布时间:2019-06-07

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

题意:可重叠的k次最长重复子串

解题关键:利用height数组对后缀进行分组,因为最长公共子串一定会在一个组内,所以判定每个组即可。二分答案,进行判定。

1 #include 
2 #include
3 #include
4 #include
5 #include
6 #include
7 #define inf 0x3f3f3f3f 8 using namespace std; 9 const int N=200005;10 int wa[N],wb[N],wv[N],wc[N];11 bool cmp(int *r,int a,int b,int l){ return r[a]==r[b]&&r[a+l]==r[b+l];}12 void make_sa(int *r,int *sa,int n,int m){13 int i,j,p,*x=wa,*y=wb;14 for(i=0;i
=0;i--) sa[--wc[x[i]]]=i;18 for(j=1,p=1;p
=j) y[p++]=sa[i]-j;21 for(i=0;i
=0;i--) sa[--wc[wv[i]]]=y[i];26 for(swap(x,y),p=1,x[sa[0]]=0,i=1;i
=x){44 num++;45 if(num>=k) return true;46 }47 else num=1;48 }49 return false;50 }51 52 int erfen(int l,int r){53 while(l
>1;55 if(check(mid)) l=mid;56 else r=mid-1;57 }58 return l;59 }60 61 int main(){62 ios::sync_with_stdio(0);63 int maxn=0;64 while(cin>>n>>k){65 for(int i=0;i
>r[i],maxn=max(maxn,r[i]);66 r[n]=0;67 make_sa(r, sa, n+1,maxn+1);68 make_height(r, sa, n);69 int ans=erfen(0,n);70 cout<
<<"\n";71 }72 return 0;73 }

 

转载于:https://www.cnblogs.com/elpsycongroo/p/7576917.html

你可能感兴趣的文章
重定向和管道
查看>>
实验五
查看>>
STL学习笔记(第二章 C++及其标准程序库简介)
查看>>
Operator_countByValue
查看>>
Java 日期往后推迟n天
查看>>
Web应用漏洞评估工具Paros
查看>>
Git 和 Github 使用指南
查看>>
20180925-4 单元测试
查看>>
mysql的数据存储
查看>>
[转载] Activiti Tenant Id 字段释疑
查看>>
[Java 8] (8) Lambda表达式对递归的优化(上) - 使用尾递归 .
查看>>
SQL Server-聚焦移除Bookmark Lookup、RID Lookup、Key Lookup提高SQL查询性能
查看>>
最小权限的挑战
查看>>
jquery 视觉特效(水平滚动图片)
查看>>
SVG笔记
查看>>
linux下使用dd命令写入镜像文件到u盘
查看>>
001---进程
查看>>
视频人脸检测——OpenCV版(三)
查看>>
php获取来访者在搜索引擎搜索某个关键词,进入网站
查看>>
物联网架构成长之路(8)-EMQ-Hook了解、连接Kafka发送消息
查看>>