题解:

同bzoj1717

代码:

#include<bits/stdc++.h>
using namespace std;
const int P1=,P2=,P=;
int a1[P],num[P],a2[P],flag[P],a[P],inv1[P],inv2[P],n,m;
int find(int x,int y)
{
int k=(long long)x*y%P;
for (;flag[k]&&(a1[k]!=x||a2[k]!=y);k=(k+)%P);
return k;
}
int pd(int x)
{
memset(a1,,sizeof a1);
memset(a2,,sizeof a2);
memset(flag,,sizeof flag);
memset(num,,sizeof num);
inv1[]=inv2[]=;
for (int i=;i<=n;i++)inv1[i]=inv1[i-]*%P1,inv2[i]=inv2[i-]*%P2;
int p1=,p2=;
for (int i=;i<=n;i++)
{
p1=(p1*+a[i])%P1;
p2=(p2*+a[i])%P2;
if (i>x)
{
p1=(p1-(long long)a[i-x]*inv1[x]%P1+P1)%P1;
p2=(p2-(long long)a[i-x]*inv2[x]%P2+P2)%P2;
}
if (i<x)continue;
int l=find(p1,p2);
a1[l]=p1;a2[l]=p2;flag[l]=;
num[l]++;
if (num[l]>=m)return ;
}
return ;
}
int main()
{
scanf("%d%d",&n,&m);
for (int i=;i<=n;i++)scanf("%d",&a[i]);
int l=,r=n;
while (l<r)
{
int mid=(l+r+)/;
if (pd(mid))l=mid;
else r=mid-;
}
printf("%d\n",l);
}

poj3261的更多相关文章

  1. 【poj3261】 Milk Patterns

    http://poj.org/problem?id=3261 (题目链接) 题意 给出n个数和k,求在给出的数中,最长的出现至少k次的可重叠子串. solution 后缀数组论文题,感觉分组思想可能会 ...

  2. POJ3261 Milk Patterns —— 后缀数组 出现k次且可重叠的最长子串

    题目链接:https://vjudge.net/problem/POJ-3261 Milk Patterns Time Limit: 5000MS   Memory Limit: 65536K Tot ...

  3. 哈希算法解决:HDU1686 && POJ2774 && POJ3261

    HDU1686 题意: 找A串在B串中的出现次数(可重叠),可用KMP做,这里只提供哈希算法做的方法 题解: 先得到A串的hash值,然后在B中枚举起点,长度为lena的子串,检验hash值是否相同就 ...

  4. POJ-3261 Milk Patterns(后缀数组)

    题目大意:找出至少出现K次的子串的最长长度. 题目分析:二分枚举长度x,判断有没有最长公共前缀不小于x的并且连续出现了至少k次的有序子串区间. 代码如下: # include<iostream& ...

  5. poj3261 Milk Patterns(后缀数组)

    [题目链接] http://poj.org/problem?id=3261 [题意] 至少出现k次的可重叠最长子串. [思路] 二分长度+划分height,然后判断是否存在一组的数目不小于k即可. 需 ...

  6. poj3261 -- Milk Patterns

                                                                        Milk Patterns Time Limit: 5000MS ...

  7. 后缀数组--可重叠的K次最长重复子串(POJ3261)

    题目:Milk Patterns #include <stdio.h> #include <string.h> #define N 1000010 int wa[N],wb[N ...

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

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

  9. Milk Patterns poj3261(后缀数组)

    Milk Patterns Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 9274   Accepted: 4173 Cas ...

  10. POJ3261:Milk Patterns

    题面 vjudge Sol 二分答案+分组,判断有没有一个组的后缀个数不小于 k 做法 # include <bits/stdc++.h> # define IL inline # def ...

随机推荐

  1. Qt的Radio Button(单选按钮)

    1 在UI界面中加入控件 2 对QRadioButton控件进行分组 QRadioButton的分组有多重方法,如采用组合框.QWidge等,下面介绍采用QButtonGroup方法来实现分组,好处是 ...

  2. @Scope注解设置创建bean的方式和生命周期

    1.1.1            Scope注解创建bean的方式和生命周期 作用 Scope设置对象在spring容器(IOC容器)中的生命周期,也可以理解为对象在spring容器中的创建方式. 取 ...

  3. js判断字符串与字符串相互包含,以及数组是否包含某个元素;

    需求:判端一个字符串是否包含另一个字符串? 实现: var str  = "adc"; 判断str 中是否包含 "c" if( str.indexOf(&quo ...

  4. C# http监听之Nancy.net

    通过winform或者是控制台应用程序监听http请求,之前使用的是微软的HttpListener,参考https://www.cnblogs.com/duanjt/p/5566336.html 然后 ...

  5. 实例对比 hibernate, spring data jpa, mybatis 选型参考

    原文: 最近重构以前写的服务,最大的一个变动是将mybatis切换为spring data jpa,切换的原因很简单,有两点:第一.它是spring的子项目能够和spring boot很好的融合,没有 ...

  6. 雷林鹏分享:C# 封装

    C# 封装 封装 被定义为"把一个或多个项目封闭在一个物理的或者逻辑的包中".在面向对象程序设计方法论中,封装是为了防止对实现细节的访问. 抽象和封装是面向对象程序设计的相关特性. ...

  7. inflate()引发NullPointerException

    有时候我们在infalete的时候明明什么都对为什么它会提示出错 原意是你的资源layout出错了 注意看有没有把View写成view 这个View应该大写!V而不是小写v 踩坑踩了两次了!上次以为是 ...

  8. memcached的部署

    window下memcached注册服务 cmd:在学习Memcached时,为了模拟分布存储,常常需要建多个Memcached服务,如何建呢,只能使用命令行了 以管理员身份运行cmd,输入如下命令 ...

  9. Leetcode 116

    /** * Definition for binary tree with next pointer. * struct TreeLinkNode { * int val; * TreeLinkNod ...

  10. 22. Generate Parentheses C++回溯法

    把左右括号剩余的次数记录下来,传入回溯函数. 判断是否得到结果的条件就是剩余括号数是否都为零. 注意判断左括号是否剩余时,加上left>0的判断条件!否则会memory limited erro ...