后缀数组--可重叠的K次最长重复子串(POJ3261)
- #include <stdio.h>
- #include <string.h>
- #define N 1000010
- int wa[N],wb[N],wv[N],ws[N];
- int rank[N],height[N];
- int sa[N],r[N];
- int abs(int x)
- {
- return x<0? -x:x;
- }
- int cmp(int *r,int a,int b,int l)
- {
- return r[a]==r[b]&&r[a+l]==r[b+l];
- }
- void da(int *r,int *sa,int n,int m)
- {
- int i,j,p,*x=wa,*y=wb,*t;
- for(i=0; i<m; i++) ws[i]=0;
- for(i=0; i<n; i++) ws[x[i]=r[i]]++;
- for(i=1; i<m; i++) ws[i]+=ws[i-1];
- for(i=n-1; i>=0; i--) sa[--ws[x[i]]]=i;
- for(p=1,j=1; p<n; j*=2,m=p)
- {
- for(p=0,i=n-j; i<n; i++) y[p++]=i;
- for(i=0; i<n; i++) if(sa[i]>=j) y[p++]=sa[i]-j;
- for(i=0; i<n; i++) wv[i]=x[y[i]];
- for(i=0; i<m; i++) ws[i]=0;
- for(i=0; i<n; i++) ws[wv[i]]++;
- for(i=1; i<m; i++) ws[i]+=ws[i-1];
- for(i=n-1; i>=0; i--)
- sa[--ws[wv[i]]]=y[i];
- for(t=x,x=y,y=t,p=1,x[sa[0]]=0,i=1; i<n; i++ )
- x[sa[i]]=cmp(y,sa[i-1],sa[i],j)?p-1:p++;
- }
- }
- void calheight(int *r,int *sa,int n)
- {
- int i,j,k=0;
- for(i=1; i<=n; i++)
- rank[sa[i]]=i;
- for(i=0; i<n; height[rank[i++]]=k)
- for(k?k--:0,j=sa[rank[i]-1]; r[i+k]==r[j+k]; k++);
- }
- bool check(int mid,int len,int k)
- {
- int i,j,tot=0;
- for(i=2;i<=len;i++)
- {
- if(height[i]<mid) tot=0;
- else
- {
- tot++;
- if(tot==k-1) return true;
- }
- }
- return false;
- }
- int Binary(int st,int ed,int len,int k)
- {
- int l=st,r=ed,mid;
- while(l<r)
- {
- mid=(l+r+1)/2;
- if(check(mid,len,k)) l=mid;
- else r=mid-1;
- }
- return l;
- }
- int main()
- {
- int i,j,n,k,ans;
- while(~scanf("%d%d",&n,&k))
- {
- for(i=0;i<n;i++)
- {
- scanf("%d",&r[i]);
- r[i]++;
- }
- r[n]=0;
- da(r,sa,n+1,1000002);
- calheight(r,sa,n);
- int ans=Binary(0,n,n,k);
- printf("%d\n",ans);
- }
- return 0;
- }
后缀数组--可重叠的K次最长重复子串(POJ3261)的更多相关文章
- poj 3261 后缀数组 可重叠的 k 次最长重复子串
Milk Patterns Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 16430 Accepted: 7252 Ca ...
- [Poj3261] [Bzoj1717] [后缀数组论文例题,USACO 2006 December Gold] Milk Patterns [后缀数组可重叠的k次最长重复子串]
和上一题(POJ1743,上一篇博客)相似,只是二分的判断条件是:是否存在一段后缀的个数不小于k #include <iostream> #include <algorithm> ...
- 后缀数组练习2:可重叠的k次最长重复子串
其实和上一题是差不多的,只是在二分check的时候有一些小小的改动 1468: 后缀数组2:可重叠的k次最长重复子串 poj3261 时间限制: 1 Sec 内存限制: 128 MB提交: 113 ...
- POJ 3261 Milk Patterns (求可重叠的k次最长重复子串)+后缀数组模板
Milk Patterns Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 7586 Accepted: 3448 Cas ...
- poj 3261 求可重叠的k次最长重复子串
题意:求可重叠的k次最长重复子串的长度 链接:点我 和poj1743差不多 #include<cstdio> #include<iostream> #include<al ...
- 【POJ 3261】Milk Patterns 可重叠的k次最长重复子串
可重叠的k次最长重复子串 #include<cstdio> #include<cstring> #include<algorithm> using namespac ...
- POJ 3261 可重叠的 k 次最长重复子串【后缀数组】
这也是一道例题 给定一个字符串,求至少出现 k 次的最长重复子串,这 k 个子串可以重叠.算法分析:这题的做法和上一题差不多,也是先二分答案,然后将后缀分成若干组.不同的是,这里要判断的是有没有一个组 ...
- poj3261 Milk Patterns 后缀数组求可重叠的k次最长重复子串
题目链接:http://poj.org/problem?id=3261 思路: 后缀数组的很好的一道入门题目 先利用模板求出sa数组和height数组 然后二分答案(即对于可能出现的重复长度进行二分) ...
- POJ 3261 Milk Patterns (后缀数组,求可重叠的k次最长重复子串)
Milk Patterns Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 16742 Accepted: 7390 Ca ...
随机推荐
- Handler.removeMessages的作用,有时候为什么一定要先remove一下呢
removeMessages会将handler对应message queue里的消息清空,如果带了int参数则是对应的消息清空.队列里面没有消息则handler会不工作,但不表示handler会停止. ...
- codeforces 264D Colorful Stones
题目 题目来自于rng_58Orz. 算法 讨论某个状态\((x,y)\)是否可达,\(x\)是狐狸到达的石头,\(y\)是猫的. 题解说,如果满足以下条件,那么它就是可到达状态: \(t[0..y] ...
- 【老鸟学算法】大整数乘法——算法思想及java实现
算法课有这么一节,专门介绍分治法的,上机实验课就是要代码实现大整数乘法.想当年比较混,没做出来,颇感遗憾,今天就把这债还了吧! 大整数乘法,就是乘法的两个乘数比较大,最后结果超过了整型甚至长整型的最大 ...
- Codeforces Round #272 (Div. 2)AK报告
A. Dreamoon and Stairs time limit per test 1 second memory limit per test 256 megabytes input standa ...
- Core 中文文档
ASP.NET Core 中文文档 第二章 指南(1)用 Visual Studio Code 在 macOS 上创建首个 ASP.NET Core 应用程序 原文:Your First ASP. ...
- 反应堆Reactor
mvn -h 可以看到很多命令及其用途:-am --also-make 同时构建所列模块的依赖模块:-amd -also-make-dependents 同时构建依赖于所列模块的模块:-pl --pr ...
- 挺苹果的声音,iPhone 5s的两处进步
苹果iPhone 5s发布后的两处重大进步让我很关注,但看了网上众多网友的点评,又深深的被中国当前手机发烧友圈的这种屌丝文化所震撼,这不是一条正确的道路,这将把中国的手机产业引向歧途,所以我不得不说几 ...
- HDU 2045 不easy系列之(3)—— LELE的RPG难题
思路: 1.若前n-1位涂的颜色是符合条件的,则因为首尾不同,再加入一位时,仅仅有1种方法:即s[n] = s[n-1] 2.若前n-1位组成的串不符合,再加入一位后合法.即由于首尾同样而引起的不合法 ...
- WordPress的用户系统总结
原文发表自我的个人主页,欢迎大家訪问~转载请保留本段,或注明原文链接:http://www.hainter.com/wordpress-user-module keyword:WordPress,用户 ...
- smartforms初始化
smartforms 第一次打开的页面是和prd环境下的一样,需要跑一个程序才能编辑