| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
提供一组数据11
1 2 3 5 4 1 2 3 5 4 1
22
1 2 3 2 1 2 3 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1
0
输出:
5
7
跪求大神帮忙看一下这个有bug的ac代码...
蒟蒻感激不尽...
#include <iostream>
#include <cstdio>
#define MAXN 500005
using namespace std;
int n, num[MAXN];
int sa[MAXN], Rank[MAXN], height[MAXN], cnt[MAXN];
int tmpa[MAXN], tmpb[MAXN], temp[MAXN];
int l, r, mid;
bool cmp(int num[],int a,int b,int len)
{return num[a]==num[b]&&num[a+len]==num[b+len];}
void work(int n,int m)
{
int *r=tmpa, *pos=tmpb;
for(int i=0;i<m;++i)cnt[i]=0;
for(int i=0;i<n;++i)++cnt[r[i]=num[i]];
for(int i=1;i<m;++i)cnt[i]+=cnt[i-1];
for(int i=n-1;i>=0;--i)sa[--cnt[r[i]]]=i;
for(int len=1, tmp=0;tmp<n;m=tmp, len*=2)
{
tmp=0;
for(int i=n-len;i<n;++i)pos[tmp++]=i;
for(int i=0;i<n;++i)if(sa[i]>=len)pos[tmp++]=sa[i]-len;
for(int i=0;i<n;++i)temp[i]=r[pos[i]];
for(int i=0;i<m;++i)cnt[i]=0;
for(int i=0;i<n;++i)++cnt[temp[i]];
for(int i=1;i<m;++i)cnt[i]+=cnt[i-1];
for(int i=n-1;i>=0;--i)sa[--cnt[temp[i]]]=pos[i];
swap(r,pos);
r[sa[0]]=0, tmp=1;
for(int i=1;i<n;++i)
r[sa[i]]=cmp(pos,sa[i],sa[i-1],len)?tmp-1:tmp++;
}
}
void calh(int n)
{
for(int i=1;i<=n;++i)Rank[sa[i]]=i;
for(int i=0, k=0, j;i<n;height[Rank[i++]]=k)
for(k?--k:0, j=sa[Rank[i]-1];num[i+k]==num[j+k];++k);
}
bool check(int mid)
{
int i=1, b, e;
while(i<=n)
{
while(i<=n&&height[i]<mid) i ++;
if(i>n) break;
b=e=sa[i-1];
while(i<=n&&height[i]>=mid)
{
b=min(b,sa[i]), e=max(e,sa[i]);
++i;
}
if(e-b>=mid)return 1;
}
return 0;
}
int main()
{
while(~scanf("%d",&n)&&n)
{
for(int i=0;i<n;++i)scanf("%d",&num[i]);
if(n<10)
{
puts("0");
continue;
}
--n;
for(int i=0;i<n;++i)
num[i]=num[i+1]-num[i]+89;
num[n]=0;
work(n+1,180);
calh(n);
l=0, r=n;
while(l<r)
{
mid=(l+r+1)/2;
if(check(mid))l=mid;
else r=mid-1;
}
if(l<4)puts("0");
else printf("%d\n",l+1);
}
return 0;
}
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator