1717: [Usaco2006 Dec]Milk Patterns 产奶的模式
2018-02-23 09:00
435 查看
题目链接
题目大意:可重叠k次重复字串
题解:根据经典论文中的解法……
先二分答案,变成判定性问题,然后将后缀分成若干组,判断是否有一个组的后缀个数不小于k
如果有,那么存在k个相同的子串满足条件,否则不存在
我的收获:SA大法吼……
题目大意:可重叠k次重复字串
题解:根据经典论文中的解法……
先二分答案,变成判定性问题,然后将后缀分成若干组,判断是否有一个组的后缀个数不小于k
如果有,那么存在k个相同的子串满足条件,否则不存在
我的收获:SA大法吼……
#include <iostream> #include <cstdio> #include <algorithm> using namespace std; const int N=1000005; int n,k; int s ,c ; int rk ,rk2 ; int sa ,height ; int cmp(int *r,int a,int b,int l){return r[a]==r[b]&&r[a+l]==r[b+l];} void DA(int n,int m=128) { int i,k,p,*x=rk,*y=rk2; for(int i=0;i<m;i++) c[i]=0; for(int i=0;i<n;i++) c[x[i]=s[i]]++; for(int i=1;i<m;i++) c[i]+=c[i-1]; for(int i=n-1;i>=0;i--) sa[--c[x[i]]]=i; for(k=1,p=1;p<n;k<<=1,m=p){ for(p=0,i=n-k;i<n;i++) y[p++]=i; for(i=0;i<n;i++) if(sa[i]>=k) y[p++]=sa[i]-k; for(int i=0;i<m;i++) c[i]=0; for(int i=0;i<n;i++) c[x[y[i]]]++; for(int i=1;i<m;i++) c[i]+=c[i-1]; for(int i=n-1;i>=0;i--) sa[--c[x[y[i]]]]=y[i]; swap(x,y),p=1,x[sa[0]]=0; for(i=1;i<n;i++) x[sa[i]]=cmp(y,sa[i-1],sa[i],k)?p-1:p++; } } inline bool check(int x) { int tmp=0; for(int i=1;i<=n;i++) { if(height[i]>=x){tmp++;if(tmp==k-1)return true;} else tmp=0; } return false; } void calh(int n) { int i,j,k=0; for(i=1;i<=n;i++) rk[sa[i]]=i; for(i=0;i<n;height[rk[i++]]=k) for(k?k--:0,j=sa[rk[i]-1];s[i+k]==s[j+k];k++); } void work() { int l,r,mid,ans; for(l=1,r=n;l<=r;){ mid=l+r>>1; if(check(mid)) l=mid+1,ans=mid; else r=mid-1; } cout<<ans<<endl; } void init() { scanf("%d%d",&n,&k); for(int i=0;i<n;i++) scanf("%d",&s[i]); s =0;DA(n+1,1000000);calh(n); } int main() { init(); work(); return 0; }
相关文章推荐
- bzoj1717: [Usaco2006 Dec]Milk Patterns 产奶的模式
- [BZOJ1717][Usaco2006 Dec]Milk Patterns 产奶的模式(后缀数组)
- BZOJ 1717: [Usaco2006 Dec]Milk Patterns 产奶的模式
- BZOJ 1717: [Usaco2006 Dec]Milk Patterns 产奶的模式
- bzoj 1717 [Usaco2006 Dec]Milk Patterns 产奶的模式
- [bzoj1717][Usaco2006 Dec]Milk Patterns 产奶的模式
- 1717: [Usaco2006 Dec]Milk Patterns 产奶的模式
- bzoj1717[Usaco2006 Dec]Milk Patterns 产奶的模式 (二分+hash)题解①
- BZOJ 1717: [Usaco2006 Dec]Milk Patterns 产奶的模式 [后缀数组]
- [Usaco2006 Dec][BZOJ1717] Milk Patterns 产奶的模式|后缀数组
- BZOJ1717: [Usaco2006 Dec]Milk Patterns 产奶的模式 后缀数组
- bzoj1717: [Usaco2006 Dec]Milk Patterns 产奶的模式[后缀数组]题解②
- BZOJ 1717 [Usaco2006 Dec]Milk Patterns 产奶的模式 后缀数组
- [bzoj1717][Usaco2006 Dec]Milk Patterns 产奶的模式——后缀数组
- bzoj 1717: [Usaco2006 Dec]Milk Patterns 产奶的模式【后缀自动机】
- [BZOJ1717][Usaco2006 Dec]Milk Patterns 产奶的模式(后缀数组)
- bzoj1717 [Usaco2006 Dec]Milk Patterns 产奶的模式
- BZOJ 1717: [Usaco2006 Dec]Milk Patterns 产奶的模式( 二分答案 + 后缀数组 )
- 【BZOJ】【1717】【USACO 2006 Dec】Milk Patterns产奶的模式
- 【bzoj1717】[Usaco2006 Dec]Milk Patterns 产奶的模式 后缀数组+离散化