题意

找出出现k次的可重叠的最长子串的长度

题解

用后缀数组。

然后求出heigth数组。

跑单调队列就行了。找出每k个数中最小的数的最大值。就是个滑动窗口啊

(不知道为什么有人写二分,其实写啥都差不多快,可能是因为二分是一个常见的模型吧)

 #include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;
const int N=;
int n,m,x[N],sa[N],c[N],k,height[N],rk[N],y[N],ans,q[N],head,tail,s[N];
void get_sa(){
for(int i=;i<=n;i++)c[x[i]=s[i]]++;
for(int i=;i<=m;i++)c[i]+=c[i-];
for(int i=n;i>=;i--)sa[c[x[i]]--]=i;
for(int k=;k<=n;k<<=){
int num=;
for(int i=n-k+;i<=n;i++)y[++num]=i;
for(int i=;i<=n;i++)if(sa[i]>k)y[++num]=sa[i]-k;
for(int i=;i<=m;i++)c[i]=;
for(int i=;i<=n;i++)c[x[i]]++;
for(int i=;i<=m;i++)c[i]+=c[i-];
for(int i=n;i>=;i--)sa[c[x[y[i]]]--]=y[i],y[i]=;
for(int i=;i<=n;i++){
swap(x[i],y[i]);
}
x[sa[]]=;num=;
for(int i=;i<=n;i++){
x[sa[i]]=(y[sa[i]]==y[sa[i-]]&&y[sa[i]+k]==y[sa[i-]+k])?num:++num;
}
if(n==num)break;
m=num;
}
}
void get_height(){
for(int i=;i<=n;i++)rk[sa[i]]=i;
int k=;
for(int i=;i<=n;i++){
if(rk[i]==)continue;
if(k)k--;
int j=sa[rk[i]-];
while(j+k<=n&&i+k<=n&&s[j+k]==s[i+k])k++;
height[rk[i]]=k;
}
}
int main(){
scanf("%d%d",&n,&k);
if(k==){
printf("%d",n);
return ;
}
m=;
for(int i=;i<=n;i++){
scanf("%d",&s[i]);
}
get_sa();
get_height();
head=;tail=;
for(int i=;i<=k;i++){
while(height[i]<=height[q[tail]]&&head<=tail)tail--;
q[++tail]=i;
}
ans=height[q[head]];
for(int i=k+;i<=n;i++){
while(q[head]<=i-k+&&head<=tail)head++;
while(height[i]<=height[q[tail]]&&head<=tail)tail--;
q[++tail]=i;
ans=max(ans,height[q[head]]);
}
printf("%d",ans);
return ;
}

POJ 3261 Milk Patterns(后缀数组+单调队列)的更多相关文章

  1. Poj 3261 Milk Patterns(后缀数组+二分答案)

    Milk Patterns Case Time Limit: 2000MS Description Farmer John has noticed that the quality of milk g ...

  2. POJ 3261 Milk Patterns 后缀数组求 一个串种 最长可重复子串重复至少k次

    Milk Patterns   Description Farmer John has noticed that the quality of milk given by his cows varie ...

  3. POJ 3261 Milk Patterns ( 后缀数组 && 出现k次最长可重叠子串长度 )

    题意 : 给出一个长度为 N 的序列,再给出一个 K 要求求出出现了至少 K 次的最长可重叠子串的长度 分析 : 后缀数组套路题,思路是二分长度再对于每一个长度进行判断,判断过程就是对于 Height ...

  4. poj 3261 Milk Patterns 后缀数组 + 二分

    题目链接 题目描述 给定一个字符串,求至少出现 \(k\) 次的最长重复子串,这 \(k\) 个子串可以重叠. 思路 二分 子串长度,据其将 \(h\) 数组 分组,判断是否存在一组其大小 \(\ge ...

  5. POJ 3261 Milk Patterns (求可重叠的k次最长重复子串)+后缀数组模板

    Milk Patterns Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 7586   Accepted: 3448 Cas ...

  6. POJ 3261 Milk Patterns 【后缀数组 最长可重叠子串】

    题目题目:http://poj.org/problem?id=3261 Milk Patterns Time Limit: 5000MS Memory Limit: 65536K Total Subm ...

  7. poj3261 Milk Patterns 后缀数组求可重叠的k次最长重复子串

    题目链接:http://poj.org/problem?id=3261 思路: 后缀数组的很好的一道入门题目 先利用模板求出sa数组和height数组 然后二分答案(即对于可能出现的重复长度进行二分) ...

  8. BZOJ#1717:[Usaco2006 Dec]Milk Patterns 产奶的模式(后缀数组+单调队列)

    1717: [Usaco2006 Dec]Milk Patterns 产奶的模式 Description 农夫John发现他的奶牛产奶的质量一直在变动.经过细致的调查,他发现:虽然他不能预见明天产奶的 ...

  9. poj 3261 Milk Patterns(后缀数组)(k次的最长重复子串)

    Milk Patterns Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 7938   Accepted: 3598 Cas ...

随机推荐

  1. ZBrush软件特性之Draw

    ZBrush®中的Draw绘制调色板包括了当前绘图的修改和控制工具,能改变工具大小.形状.强度.不透明度和其他一些功能. Draw Size(绘制大小):设置画笔的外形尺寸,调节ZBrush绘制笔刷圆 ...

  2. EFCore笔记之异步查询

    当在数据库中执行查询时,异步查询可避免阻止线程. 这有助于避免冻结富客户端应用程序的 UI.异步操作还可以增加 Web 应用程序的吞吐量,可以在数据库操作完成时释放线程去处理其他请求. Entity ...

  3. Windows系统Python环境搭建

    Python下载 下载地址:https://www.python.org/downloads/ 选择需要下载的版本 以Python3.3.7版本为例,下载64位和32位都分别有三种方式,依次是压缩包, ...

  4. sklearn学习6----交叉验证

    1.kfold:自己分样本来交叉验证迭代 导入模块:from sklearn.model_selection import KFold 参数: KFold(n_splits=3, shuffle=Fa ...

  5. HDU 5289 Assignment [优先队列 贪心]

    HDU 5289 - Assignment http://acm.hdu.edu.cn/showproblem.php?pid=5289 Tom owns a company and he is th ...

  6. 对于 wepy 不是内部或外部命令 -- 的解决办法

    闲来没事继续研究自己之前一直未解决的问题,  就是自己笔记本安装wepy-cli,一直提示"wepy 不是内部或外部命令". 因为公司里面用的是这个框架, 想着自己在家没事的时候去 ...

  7. docker 镜像的导入导出

    今天使用docker部署asp.net core应用程序时,发现当我们做好基础镜像之后需要把镜像导出到正式环境,因此学习了一下如何从docker中导出镜像: 1.首先通过docker images命令 ...

  8. Linux内核源码情景分析-wait()、schedule()

    父进程执行wait4,并调用schedule切换到子进程: wait4(child, NULL, 0, NULL); 像其它系统调用一样.wait4()在内核中的入口是sys_wait4().代码例如 ...

  9. AssetBundle打包优化解决方式

    第一阶段:AssetBundle出一套解决方式 1.解决如今同一个资源打2个bundle的冗余问题 2.測试验证节省资源的比率是多少 问题拆分 一.bundle反复 问  题  :同样资源拆分问题? ...

  10. iOS KVC(Key-Value Coding)

    常见用法: 获取值 valueForKey: 依据属性名取值 valueForKeyPath: 依据路径取值(如:[person valueForKeyPath:@"car.price&qu ...