link\

这是一道后缀匹配的模板题

我们只需要将height算出来

然后二分一下答案就可以了

#include<cstdio>
#include<algorithm>
#include<iostream>
#include<cstring>
using namespace std;
const int maxn=1010000;
int data[maxn];
int rank[maxn];
int tot[maxn];
int sa[maxn];
int pas[maxn];
int len,n,m;
int height[maxn];
int k;
void build_Sa()
{
m=150;
for(int i=0;i<n;i++)
rank[i]=data[i],tot[data[i]]+=1;
for(int i=1;i<=m;i++)
tot[i]+=tot[i-1];
for(int i=n-1;i>=0;i--)
sa[--tot[rank[i]]]=i;
for(int k=1;k<=n;k<<=1)
{
int num=0;
for(int i=n-k;i<n;i++) pas[num++]=i;
for(int i=0;i<n;i++)
if(sa[i]>=k) pas[num++]=sa[i]-k;
for(int i=0;i<=m;i++) tot[i]=0;
for(int i=0;i<n;i++) tot[rank[i]]+=1;
for(int i=1;i<=m;i++) tot[i]+=tot[i-1];
for(int i=n-1;i>=0;i--)
sa[--tot[rank[pas[i]]]]=pas[i],pas[i]=0;
swap(pas,rank);
num=1;rank[sa[0]]=1;
for(int i=1;i<n;i++)
if(pas[sa[i]]!=pas[sa[i-1]]||pas[sa[i]+k]!=pas[sa[i-1]+k])
rank[sa[i]]=++num;
else
rank[sa[i]]=num;
if(num>=n) break;
m=num;
}
}
void build_LCP()
{
int h=0;
/*for(int i=0;i<n;i++) pas[sa[i]]=i;
for(int i=0;i<n;i++)
{
if(!pas[i]) continue;
int j=sa[pas[i]-1];
if(h) h--;
while(data[j+h]==data[i+h]&&j+h<n&&i+h<n) h++;
height[pas[i]]=h;
}*/
for(int i=0;i<n;i++)
{
if(rank[i]-1==0) continue;
int j=sa[rank[i]-2];
if(h) h-=1;
while(j+h<n&&i+h<n)
if(data[j+h]!=data[i+h]) break;
else h+=1;
height[rank[i]]=h;
}
}
bool check(int val)
{
int now=0;
for(int i=0;i<=n;i++)
{
if(height[i]>=val) now+=1;
else now=0;
if(now>=k-1) return true;
}
return false;
}
int main()
{
scanf("%d%d",&n,&k);
for(int i=0;i<n;i++) scanf("%d",&data[i]);
int l=1,r=n,mid;
build_Sa();
build_LCP();
while(l+1<r)
{
mid=(l+r)>>1;
if(check(mid)) l=mid;
else r=mid-1;
}
printf("%d", check(r) ? r : l );
}
/*
8 2
1
2
3
2
3
2
3
1
12323231
*/

P2852 [USACO06DEC]牛奶模式Milk Patterns的更多相关文章

  1. [洛谷P2852] [USACO06DEC]牛奶模式Milk Patterns

    洛谷题目链接:[USACO06DEC]牛奶模式Milk Patterns 题目描述 Farmer John has noticed that the quality of milk given by ...

  2. luogu P2852 [USACO06DEC]牛奶模式Milk Patterns 后缀数组 + Height数组 + 二分答案 + 扫描

    后缀数组有一个十分有趣的性质: $height[rk[i]] >= height[rk[i-1]] - 1$    Code: #include <bits/stdc++.h> #d ...

  3. Luogu P2852 [USACO06DEC]牛奶模式Milk Patterns

    题目链接 \(Click\) \(Here\) 水题.利用\(Height\)的性质维护一个单调栈即可. #include <bits/stdc++.h> using namespace ...

  4. 【后缀数组】【LuoguP2852】 [USACO06DEC]牛奶模式Milk Patterns

    题目链接 题目描述 农夫John发现他的奶牛产奶的质量一直在变动.经过细致的调查,他发现:虽然他不能预见明天产奶的质量,但连续的若干天的质量有很多重叠.我们称之为一个"模式". J ...

  5. [Luogu2852][USACO06DEC]牛奶模式Milk Patterns

    Luogu 一句话题意 给出一个串,求至少出现了\(K\)次的子串的最长长度. sol 对这个串求后缀数组. 二分最长长度. 如果有\(K\)个不同后缀他们两两的\(lcp\)都\(>=mid\ ...

  6. [USACO06DEC] 牛奶模式Milk Patterns

    题目链接:戳我 我们知道后缀数组的h数组记录的是后缀i和后缀i-1的最长公共前缀长度,后缀的前缀其实就是子串. 因为是可以重复出现的子串,所以我们只要计算哪些h数组的长度大于等于x即可.这一步操作我们 ...

  7. 洛谷P2852 牛奶模式Milk Patterns [USACO06DEC] 字符串

    正解:SA/二分+哈希 解题报告: 传送门! umm像这种子串的问题已经算是比较套路的了,,,?就后缀的公共前缀这样儿的嘛QwQ 所以可以先求个SA 然后现在考虑怎么判断一个长度为d的子串出现了k次? ...

  8. 2018.07.17 牛奶模式Milk Patterns(二分+hash)

    传送门 一道简单的字符串.这里收集了几种经典做法: SAM,不想写. 后缀数组+二分,不想写 后缀数组+单调队列,不想写 hash+二分,for循哈希,天下无敌!于是妥妥的hash 代码如下: #in ...

  9. USACO06DEC 牛奶模式

    题意:求最长的可重叠的 K重复子串 的长度 考虑二分长度s,转化为验证性问题. 对SA进行分组.保证组内Height最小为s.这样在组内RMQ就可以任意了,因为RMQ一定是大于S的. 只要组内元素个数 ...

随机推荐

  1. TOJ 2733 棋盘游戏

    Description 小 希和Gardon在玩一个游戏:对一个N*M的棋盘,在格子里放尽量多的一些国际象棋里面的“车”,并且使得他们不能互相攻击,这当然很简单,但是 Gardon限制了只有某些格子才 ...

  2. innosetup的静默安装与卸载

    静默安装,就是减少程序与用户的交互,一站式的安装过程(一气呵成) 1. 静默安装参数 innosetup的静默安装是通过参数来控制的 1.1.  /silent                     ...

  3. FZU 2221—— RunningMan——————【线性规划】

     Problem 2221 RunningMan Accept: 17    Submit: 52Time Limit: 1000 mSec    Memory Limit : 32768 KB  P ...

  4. Java学习第二十天

    1:递归(理解) (1)方法定义中调用方法本身的现象 举例:老和尚给小和尚讲故事,我们学编程 (2)递归的注意事项: A:要有出口,否则就是死递归 B:次数不能过多,否则内存溢出 C:构造方法不能递归 ...

  5. 深入理解JavaScript系列(30):设计模式之外观模式

    介绍 外观模式(Facade)为子系统中的一组接口提供了一个一致的界面,此模块定义了一个高层接口,这个接口值得这一子系统更加容易使用. 正文 外观模式不仅简化类中的接口,而且对接口与调用者也进行了解耦 ...

  6. 浅谈 .NET Framework 与 .NET Core 的区别与联系

    2017到了,咱们学点啥啊,要想知道学点啥,先弄清.NET Framework 与 .NET Core  这两个概念 .当今 net 生态系统如下: 从上面图中我们可以看到.net  主要分为三个部分 ...

  7. Django分页解析

    分页 django中实现管理数据分页的类位于 django.core.paginator.py中 Paginator类 对列表数据进行分页处理 对象 Paginator(Post.objects.al ...

  8. PAT 1036 Boys vs Girls

    #include <cstdio> #include <iostream> #include <cstdlib> #include <algorithm> ...

  9. css 盒模型 文档流 几种清除浮动的方法

    盒模型 1.box-sizing: content-box 是普通的默认的一种盒子表现模式 盒子大小为 width + padding + border   content-box:此值为其默认值,其 ...

  10. html相对定位绝对定位

    孔子说:“温故而知新,可以为师矣.”这几天参加了一个免费的前端课,每天晚上都有直播,讲解一个独立的案例.在听前端基础的时候,发现自己有不少东西没学会,平时在学校虽说html也写了不少,但有好大一部分都 ...