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. Unity Editor Console Pro 扩展点击定位到外部工程

    链接 http://blog.csdn.net/akof1314/article/details/53232981 http://forum.china.unity3d.com/thread-2689 ...

  2. 资料收集:学习 Linux/*BSD/Unix 的 30 个最佳在线文档

    文章转自:https://linux.cn/article-10311-1.html 手册页(man)是由系统管理员和 IT 技术开发人员写的,更多的是为了作为参考而不是教你如何使用.手册页对于已经熟 ...

  3. Android开发_如何调用系统默认浏览器访问

    Android开发_如何调用系统默认浏览器访问 2015-10-20 17:53 312人阅读  http://blog.sina.com.cn/s/blog_6efce07e010142w7.htm ...

  4. 深入理解JavaScript系列(35):设计模式之迭代器模式

    介绍 迭代器模式(Iterator):提供一种方法顺序一个聚合对象中各个元素,而又不暴露该对象内部表示. 迭代器的几个特点是: 1.访问一个聚合对象的内容而无需暴露它的内部表示. 2.为遍历不同的集合 ...

  5. phpstorm主题设置

    毫无疑问,phpstorm很好用,但是安装完成后自带的主题,丑的一匹,所以总结下如何更换主题............. 1.主题下载位置 http://www.phpstorm-themes.com ...

  6. pId的数据结构转children 数据结构(JS);

    在工作中经常遇到需要把带有pId的的list数据转换为children格式的树形结构,一直都没有找到太好的工具函数.偶然间看到了这个函数,研究了下,感觉这个函数很强大,所以记录下来,作为备用,同时也贴 ...

  7. 003Linux常用命令

    文件操作 01  命令 : list----列出目录信息 命令格式: ls [-选项] [目录] 选项 : -a --all 不忽略以"."开头的隐藏文件 : -d --direc ...

  8. PLC-Heart

  9. android的MVP模式

    MVP简介 相信大家对MVC都是比较熟悉了:M-Model-模型.V-View-视图.C-Controller-控制器,MVP作为MVC的演化版本,那么类似的MVP所对应的意义:M-Model-模型. ...

  10. 面试题之----一次完整的HTTP请求过程

    当我们在浏览器的地址栏输入 www.linux178.com ,然后回车,回车这一瞬间到看到页面到底发生了什么呢? 以下过程仅是个人理解: 域名解析 --> 发起TCP的3次握手 --> ...