题目求最长的重复k次可重叠子串。

POJ1743同理。

  1. 二分枚举ans判定是否成立
  2. height分组,如果大于等于ans的组里的个数大于等于k-1,这个ans就可行
  1. #include<cstdio>
  2. #include<cstring>
  3. #include<algorithm>
  4. using namespace std;
  5. #define MAXN 1000001
  6.  
  7. int wa[MAXN],wb[MAXN],wv[MAXN],ws[MAXN];
  8. int cmp(int *r,int a,int b,int l){
  9. return r[a]==r[b] && r[a+l]==r[b+l];
  10. }
  11. int sa[MAXN],rank[MAXN],height[MAXN];
  12. void SA(int *r,int n,int m){
  13. int *x=wa,*y=wb;
  14.  
  15. for(int i=; i<m; ++i) ws[i]=;
  16. for(int i=; i<n; ++i) ++ws[x[i]=r[i]];
  17. for(int i=; i<m; ++i) ws[i]+=ws[i-];
  18. for(int i=n-; i>=; --i) sa[--ws[x[i]]]=i;
  19.  
  20. int p=;
  21. for(int j=; p<n; j<<=,m=p){
  22. p=;
  23. for(int i=n-j; i<n; ++i) y[p++]=i;
  24. for(int i=; i<n; ++i) if(sa[i]>=j) y[p++]=sa[i]-j;
  25. for(int i=; i<n; ++i) wv[i]=x[y[i]];
  26. for(int i=; i<m; ++i) ws[i]=;
  27. for(int i=; i<n; ++i) ++ws[wv[i]];
  28. for(int i=; i<m; ++i) ws[i]+=ws[i-];
  29. for(int i=n-; i>=; --i) sa[--ws[wv[i]]]=y[i];
  30. swap(x,y); x[sa[]]=; p=;
  31. for(int i=; i<n; ++i) x[sa[i]]=cmp(y,sa[i-],sa[i],j)?p-:p++;
  32. }
  33.  
  34. for(int i=; i<n; ++i) rank[sa[i]]=i;
  35. int k=;
  36. for(int i=; i<n-; height[rank[i++]]=k){
  37. if(k) --k;
  38. for(int j=sa[rank[i]-]; r[i+k]==r[j+k]; ++k);
  39. }
  40. }
  41.  
  42. int n,k,a[MAXN];
  43. bool isok(int len){
  44. int cnt=;
  45. bool flag=;
  46. for(int i=; i<=n; ++i){
  47. if(height[i]>=len){
  48. if(flag){
  49. ++cnt;
  50. if(cnt+>=k) return ;
  51. }else{
  52. flag=;
  53. cnt=;
  54. if(cnt+>=k) return ;
  55. }
  56. }else{
  57. flag=;
  58. cnt=;
  59. }
  60. }
  61. return ;
  62. }
  63. int main(){
  64. int mx=;
  65. scanf("%d%d",&n,&k);
  66. for(int i=; i<n; ++i){
  67. scanf("%d",a+i);
  68. mx=max(mx,++a[i]);
  69. }
  70. a[n]=;
  71. SA(a,n+,mx+);
  72. int l=,r=n;
  73. while(l<r){
  74. int mid=l+r+>>;
  75. if(isok(mid)) l=mid;
  76. else r=mid-;
  77. }
  78. printf("%d",l);
  79. return ;
  80. }

POJ3261 Milk Patterns(二分+后缀数组)的更多相关文章

  1. POJ3261 Milk Patterns 【后缀数组】

    牛奶模式 时间限制: 5000MS   内存限制: 65536K 提交总数: 16796   接受: 7422 案件时间限制: 2000MS 描述 农夫约翰已经注意到,他的牛奶的质量每天都在变化.经进 ...

  2. poj3261 Milk Patterns【后缀数组】【二分】

    Farmer John has noticed that the quality of milk given by his cows varies from day to day. On furthe ...

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

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

  4. poj3261 Milk Patterns(后缀数组)

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

  5. 【BZOJ1717&POJ3261】Milk Patterns(后缀数组,二分)

    题意:求字符串的可重叠的k次最长重复子串 n<=20000 a[i]<=1000000 思路:后缀数组+二分答案x,根据height分组,每组之间的height>=x 因为可以重叠, ...

  6. POJ 3261 Milk Patterns(后缀数组+二分答案)

    [题目链接] http://poj.org/problem?id=3261 [题目大意] 求最长可允许重叠的出现次数不小于k的子串. [题解] 对原串做一遍后缀数组,二分子串长度x,将前缀相同长度超过 ...

  7. POJ 3261 Milk Patterns(后缀数组+二分答案+离散化)

    题意:给定一个字符串,求至少出现k 次的最长重复子串,这k 个子串可以重叠. 分析:经典的后缀数组求解题:先二分答案,然后将后缀分成若干组.这里要判断的是有没有一个组的符合要求的后缀个数(height ...

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

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

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

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

  10. POJ 3261 Milk Patterns (后缀数组,求可重叠的k次最长重复子串)

    Milk Patterns Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 16742   Accepted: 7390 Ca ...

随机推荐

  1. jenkins shell脚本构建项目--留

    1.echo `date` "doing  compling  . . . " if [ "$RELEASE" == "false" ]; ...

  2. FTP2

    FTP: 环境:windows, python 3.5功能:1.用户加密认证,可自行配置家目录磁盘大小2.多用户登陆3.查看当前目录(家目录权限下)4.切换目录(家目录权限下)5.上传下载,进度条展示 ...

  3. 【转载】Unity3d UnityEditor编辑器定制和开发插件

    在阅读本教程之前,你需要对Unity的操作流程有一些基础的认识,并且最好了解内置的GUI系统如何使用. 如何让编辑器运行你的代码 Unity3D可以通过事件触发来执行你的编辑器代码,但是我们需要一些编 ...

  4. java 日期处理相关

    /** *获取指定日期 前后指定天数的 日期 * */ public static String getNewDate(String sdate, int days) throws Exception ...

  5. SpringBoot Rabbitmq接收消息

    官网地址:https://docs.spring.io/spring-boot/docs/2.1.3.RELEASE/reference/htmlsingle/#boot-features-amqp ...

  6. android 拓展ImageView播放GIF动画

    原生Android控件ImageView并不能支持播放GiF格式的图片.如果将一张GIF的图片放入ImageView中,它只会显示图片的第一帧,不会产生任何动画效果. Android中播放GIF动画实 ...

  7. BATCH梯度下降,单变量线性回归

  8. 为啥shmem不回收 | drop_caches

    内核在哪里禁止对tmpfs中内存页的回收 mem.limit_in_bytes同样会触发shrink_zones过程! shrink_zones是代码中的直接内存回收路径 1.try_to_free_ ...

  9. [hdu6437]Problem L. Videos

    题目大意:有$n$个小时,有$m$个节目(每种节目都有类型$0/1$),有$k$个人,一个人连续看相同类型的节目会扣$w$快乐值. 每一种节目有都一个播放区间$[l,r]$.每个人同一时间只能看一个节 ...

  10. POJ 3461Oulipo KMP模板

    KMP之所以线性,因为匹配的时候i是不往回走的 我们只用调整j的位置 假设在s中找t 用二元组(i,j)表示s串的[i-j+1,i] 与t串的[1,j]匹配 假设s[i+1]和t[j]匹配上了,就j+ ...