POJ3261-Milk Patterns-后缀数组
可重叠重复k次的最长子串长度。
还是使用二分答案对heigh数组分组的做法。
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <vector>
#include <iostream> using namespace std;
const int maxn = 2e4+; int s[maxn];
int sa[maxn],rank[maxn],height[maxn]; int t[maxn],t2[maxn],c[maxn];
void build(int n,int m)
{
int i,j,p,*x = t, *y = t2; for(i=;i<m;i++)c[i]=;
for(i=;i<n;i++)c[x[i]=s[i]]++;
for(i=;i<m;i++)c[i]+=c[i-];
for(i=n-;i>=;i--)sa[--c[x[i]]]=i;
for(j=;j<=n;j<<=)
{
p=;
for(i=n-j;i<n;i++)y[p++]=i;
for(i=;i<n;i++)if(sa[i]>=j)y[p++]=sa[i]-j;
for(i=;i<m;i++)c[i]=;
for(i=;i<n;i++)c[x[y[i]]]++;
for(i=;i<m;i++)c[i]+=c[i-];
for(i=n-;i>=;i--)sa[--c[x[y[i]]]]=y[i];
swap(x,y);
p=;x[sa[]]=;
for(i=;i<n;i++)
x[sa[i]]=y[sa[i-]]==y[sa[i]]&&y[sa[i-]+j]==y[sa[i]+j]?p-:p++;
if(p>=n)break;
m=p;
}
n--;
int k = ;
for(int i=;i<=n;i++) rank[sa[i] ] = i;
for(int i=;i<n;i++)
{
if(k) k--;
int j = sa[rank[i]-];
while(s[i+k]==s[j+k]) k++;
height[rank[i] ] = k;
}
} int N,K; bool check(int len,int k)
{
int cnt = ;
for(int i=;i<=N;i++)
{
if(height[i] >= len)
{
cnt++;
if(cnt >= k) return true;
}
else
cnt = ;
}
return false;
} int main()
{
while(~scanf("%d%d",&N,&K))
{
int Max = ;
for(int i=,tmp;i<N;i++)
{
scanf("%d",&s[i]);
Max = max(Max,s[i]);
}
s[N] = ;
build(N+,Max+); int l=,r=N,mid;
int ans = ; while(l<=r)
{
mid = (l+r)>>;
if(check(mid,K)){
l = mid+;
ans = mid;
}
else
r = mid-;
}
printf("%d\n",ans);
}
}
POJ
POJ3261-Milk Patterns-后缀数组的更多相关文章
- POJ3261 Milk Patterns —— 后缀数组 出现k次且可重叠的最长子串
题目链接:https://vjudge.net/problem/POJ-3261 Milk Patterns Time Limit: 5000MS Memory Limit: 65536K Tot ...
- POJ-3261 Milk Patterns,后缀数组+二分。。
Milk Patterns 题意:求可重叠的至少重复出现k次的最长的字串长. 这题的做法和上一题 ...
- poj3261 Milk Patterns 后缀数组求可重叠的k次最长重复子串
题目链接:http://poj.org/problem?id=3261 思路: 后缀数组的很好的一道入门题目 先利用模板求出sa数组和height数组 然后二分答案(即对于可能出现的重复长度进行二分) ...
- [USACO06FEC]Milk Patterns --- 后缀数组
[USACO06FEC]Milk Patterns 题目描述: Farmer John has noticed that the quality of milk given by his cows v ...
- POJ3261 Milks patterns(后缀数组)
Farmer John has noticed that the quality of milk given by his cows varies from day to day. On furthe ...
- Poj 3261 Milk Patterns(后缀数组+二分答案)
Milk Patterns Case Time Limit: 2000MS Description Farmer John has noticed that the quality of milk g ...
- POJ 3261 Milk Patterns 后缀数组求 一个串种 最长可重复子串重复至少k次
Milk Patterns Description Farmer John has noticed that the quality of milk given by his cows varie ...
- 【poj 3261】Milk Patterns 后缀数组
Milk Patterns 题意 给出n个数字,以及一个k,求至少出现k次的最长子序列的长度 思路 和poj 1743思路差不多,二分长度,把后缀分成若干组,每组任意后缀公共前缀都>=当前二分的 ...
- BZOJ 1717 [USACO06DEC] Milk Patterns (后缀数组+二分)
题目大意:求可重叠的相同子串数量至少是K的子串最长长度 洛谷传送门 依然是后缀数组+二分,先用后缀数组处理出height 每次二分出一个长度x,然后去验证,在排序的后缀串集合里,有没有连续数量多于K个 ...
- POJ 3261 Milk Patterns(后缀数组+单调队列)
题意 找出出现k次的可重叠的最长子串的长度 题解 用后缀数组. 然后求出heigth数组. 跑单调队列就行了.找出每k个数中最小的数的最大值.就是个滑动窗口啊 (不知道为什么有人写二分,其实写啥都差不 ...
随机推荐
- 如何选择分布式事务形态(TCC,SAGA,2PC,补偿,基于消息最终一致性等等)
各种形态的分布式事务 分布式事务有多种主流形态,包括: 基于消息实现的分布式事务 基于补偿实现的分布式事务(gts/fescar自动补偿的形式) 基于TCC实现的分布式事务 基于SAGA实现的分布式事 ...
- 从 0 到 1 实现 react - 9.onChange 事件以及受控组件
该系列文章在实现 cpreact 的同时理顺 React 框架的核心内容 项目地址 从一个疑问点开始 接上一章 HOC 探索 抛出的问题 ---- react 中的 onChange 事件和原生 DO ...
- 未安装Oracle客户端的服务器上,使用ASP.NET远程连接Oracle
公司服务器一直都是使用 .NET+SQLSERVER的开发方式,有个项目需要进行读取远程Oracle的需求.由于oracle 基本不会,也是一边做一遍摸索. 首先是使用工具测试是否已经联通,因为之前用 ...
- H5 标签选择器
08-标签选择器 我是段落 我是段落 我是段落 我是段落 我是段落 我是标题 <!DOCTYPE html> <html lang="en"> <he ...
- jquery判断<inpur type="checkbox" checked>是否被选择
建议使用 $('#isCheck').attr('checked') 这样的,利于判断 console.log($('#isCheck').prop('checked')); 可以看出prop当che ...
- 从Mongo导出数据库到Excel
在MongoDB的安装目录的bin文件夹下打开命令行: ./mongoexport -d kugou_db -c songs -f rank,singer,song,time --type=csv - ...
- Prometheus & SoundCloud
Prometheus 系统监控方案 一 - Vovolie - 博客园https://www.cnblogs.com/vovlie/p/Prometheus_CONCEPTS.html Prometh ...
- vue-cli 上传图片上传到OSS(阿里云)
https://help.aliyun.com/document_detail/32068.html?spm=5176.doc32069.6.304.Qc4SUs(看) https://help.al ...
- git客户端下载 和安装
网址 https://git-scm.com/download/win 点击next 说明: (1)图标组件(Addition icons) : 选择是否创建桌面快捷方式. (2)桌面浏览(Wind ...
- jquery选择基础
1 元素选择器 之前不熟悉的是如: $("input.cls1"); 这种用法 2 属性选择器 包含name属性的input元素, 如 $("input[name]&qu ...