题目:Milk Patterns

  1. #include <stdio.h>
  2. #include <string.h>
  3. #define N 1000010
  4.  
  5. int wa[N],wb[N],wv[N],ws[N];
  6. int rank[N],height[N];
  7. int sa[N],r[N];
  8.  
  9. int abs(int x)
  10. {
  11. return x<0? -x:x;
  12. }
  13.  
  14. int cmp(int *r,int a,int b,int l)
  15. {
  16. return r[a]==r[b]&&r[a+l]==r[b+l];
  17. }
  18.  
  19. void da(int *r,int *sa,int n,int m)
  20. {
  21. int i,j,p,*x=wa,*y=wb,*t;
  22. for(i=0; i<m; i++) ws[i]=0;
  23. for(i=0; i<n; i++) ws[x[i]=r[i]]++;
  24. for(i=1; i<m; i++) ws[i]+=ws[i-1];
  25. for(i=n-1; i>=0; i--) sa[--ws[x[i]]]=i;
  26. for(p=1,j=1; p<n; j*=2,m=p)
  27. {
  28. for(p=0,i=n-j; i<n; i++) y[p++]=i;
  29. for(i=0; i<n; i++) if(sa[i]>=j) y[p++]=sa[i]-j;
  30. for(i=0; i<n; i++) wv[i]=x[y[i]];
  31. for(i=0; i<m; i++) ws[i]=0;
  32. for(i=0; i<n; i++) ws[wv[i]]++;
  33. for(i=1; i<m; i++) ws[i]+=ws[i-1];
  34. for(i=n-1; i>=0; i--)
  35. sa[--ws[wv[i]]]=y[i];
  36. for(t=x,x=y,y=t,p=1,x[sa[0]]=0,i=1; i<n; i++ )
  37. x[sa[i]]=cmp(y,sa[i-1],sa[i],j)?p-1:p++;
  38. }
  39. }
  40.  
  41. void calheight(int *r,int *sa,int n)
  42. {
  43. int i,j,k=0;
  44. for(i=1; i<=n; i++)
  45. rank[sa[i]]=i;
  46. for(i=0; i<n; height[rank[i++]]=k)
  47. for(k?k--:0,j=sa[rank[i]-1]; r[i+k]==r[j+k]; k++);
  48. }
  49.  
  50. bool check(int mid,int len,int k)
  51. {
  52. int i,j,tot=0;
  53. for(i=2;i<=len;i++)
  54. {
  55. if(height[i]<mid) tot=0;
  56. else
  57. {
  58. tot++;
  59. if(tot==k-1) return true;
  60. }
  61. }
  62. return false;
  63. }
  64.  
  65. int Binary(int st,int ed,int len,int k)
  66. {
  67. int l=st,r=ed,mid;
  68. while(l<r)
  69. {
  70. mid=(l+r+1)/2;
  71. if(check(mid,len,k)) l=mid;
  72. else r=mid-1;
  73. }
  74. return l;
  75. }
  76.  
  77. int main()
  78. {
  79. int i,j,n,k,ans;
  80. while(~scanf("%d%d",&n,&k))
  81. {
  82. for(i=0;i<n;i++)
  83. {
  84. scanf("%d",&r[i]);
  85. r[i]++;
  86. }
  87. r[n]=0;
  88. da(r,sa,n+1,1000002);
  89. calheight(r,sa,n);
  90. int ans=Binary(0,n,n,k);
  91. printf("%d\n",ans);
  92. }
  93. return 0;
  94. }

后缀数组--可重叠的K次最长重复子串(POJ3261)的更多相关文章

  1. poj 3261 后缀数组 可重叠的 k 次最长重复子串

    Milk Patterns Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 16430   Accepted: 7252 Ca ...

  2. [Poj3261] [Bzoj1717] [后缀数组论文例题,USACO 2006 December Gold] Milk Patterns [后缀数组可重叠的k次最长重复子串]

    和上一题(POJ1743,上一篇博客)相似,只是二分的判断条件是:是否存在一段后缀的个数不小于k #include <iostream> #include <algorithm> ...

  3. 后缀数组练习2:可重叠的k次最长重复子串

    其实和上一题是差不多的,只是在二分check的时候有一些小小的改动 1468: 后缀数组2:可重叠的k次最长重复子串 poj3261 时间限制: 1 Sec  内存限制: 128 MB提交: 113  ...

  4. POJ 3261 Milk Patterns (求可重叠的k次最长重复子串)+后缀数组模板

    Milk Patterns Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 7586   Accepted: 3448 Cas ...

  5. poj 3261 求可重叠的k次最长重复子串

    题意:求可重叠的k次最长重复子串的长度 链接:点我 和poj1743差不多 #include<cstdio> #include<iostream> #include<al ...

  6. 【POJ 3261】Milk Patterns 可重叠的k次最长重复子串

    可重叠的k次最长重复子串 #include<cstdio> #include<cstring> #include<algorithm> using namespac ...

  7. POJ 3261 可重叠的 k 次最长重复子串【后缀数组】

    这也是一道例题 给定一个字符串,求至少出现 k 次的最长重复子串,这 k 个子串可以重叠.算法分析:这题的做法和上一题差不多,也是先二分答案,然后将后缀分成若干组.不同的是,这里要判断的是有没有一个组 ...

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

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

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

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

随机推荐

  1. Handler.removeMessages的作用,有时候为什么一定要先remove一下呢

    removeMessages会将handler对应message queue里的消息清空,如果带了int参数则是对应的消息清空.队列里面没有消息则handler会不工作,但不表示handler会停止. ...

  2. codeforces 264D Colorful Stones

    题目 题目来自于rng_58Orz. 算法 讨论某个状态\((x,y)\)是否可达,\(x\)是狐狸到达的石头,\(y\)是猫的. 题解说,如果满足以下条件,那么它就是可到达状态: \(t[0..y] ...

  3. 【老鸟学算法】大整数乘法——算法思想及java实现

    算法课有这么一节,专门介绍分治法的,上机实验课就是要代码实现大整数乘法.想当年比较混,没做出来,颇感遗憾,今天就把这债还了吧! 大整数乘法,就是乘法的两个乘数比较大,最后结果超过了整型甚至长整型的最大 ...

  4. Codeforces Round #272 (Div. 2)AK报告

    A. Dreamoon and Stairs time limit per test 1 second memory limit per test 256 megabytes input standa ...

  5. Core 中文文档

    ASP.NET Core 中文文档 第二章 指南(1)用 Visual Studio Code 在 macOS 上创建首个 ASP.NET Core 应用程序   原文:Your First ASP. ...

  6. 反应堆Reactor

    mvn -h 可以看到很多命令及其用途:-am --also-make 同时构建所列模块的依赖模块:-amd -also-make-dependents 同时构建依赖于所列模块的模块:-pl --pr ...

  7. 挺苹果的声音,iPhone 5s的两处进步

    苹果iPhone 5s发布后的两处重大进步让我很关注,但看了网上众多网友的点评,又深深的被中国当前手机发烧友圈的这种屌丝文化所震撼,这不是一条正确的道路,这将把中国的手机产业引向歧途,所以我不得不说几 ...

  8. HDU 2045 不easy系列之(3)—— LELE的RPG难题

    思路: 1.若前n-1位涂的颜色是符合条件的,则因为首尾不同,再加入一位时,仅仅有1种方法:即s[n] = s[n-1] 2.若前n-1位组成的串不符合,再加入一位后合法.即由于首尾同样而引起的不合法 ...

  9. WordPress的用户系统总结

    原文发表自我的个人主页,欢迎大家訪问~转载请保留本段,或注明原文链接:http://www.hainter.com/wordpress-user-module keyword:WordPress,用户 ...

  10. smartforms初始化

    smartforms  第一次打开的页面是和prd环境下的一样,需要跑一个程序才能编辑