#include<bits/stdc++.h>
using namespace std;
const int b=49999,M=200010;
typedef unsigned long long ull;
map<ull,bool>mp;
int a[M],anss[M];
ull sum1[M],sum2[M],power[M];
ull get_hush1(int x,int y){
return sum1[y]-sum1[x-1]*power[y-x+1];
}
ull get_hush2(int x,int y){
return sum2[x]-sum2[y+1]*power[y-x+1];
}
int main(){
int n,i,j,l,r,sum,len=0,ans=0;
scanf("%d",&n);
power[0]=1;
for(i=1;i<=n;i++){
scanf("%d",&a[i]);
sum1[i]=sum1[i-1]*b+(ull)(a[i]);
power[i]=power[i-1]*b;
}
for(i=n;i>=1;i--)
sum2[i]=sum2[i+1]*b+(ull)(a[i]);
for(i=1;i<=n;i++){
if(n/i<ans)break;
sum=0;
mp.clear();
for(j=1;i+j-1<=n;j+=i){
l=j;r=i+j-1;
if(mp[get_hush1(l,r)]==0){
sum++;
mp[get_hush1(l,r)]=1;
mp[get_hush2(l,r)]=1;
}
}
if(sum>ans){
ans=sum;
len=0;
}
if(sum==ans)
anss[++len]=i;
}
printf("%d %d\n",ans,len);
for(i=1;i<len;i++)
printf("%d ",anss[i]);
printf("%d",anss[len]);
return 0;
}
BZOJ 2081
最新推荐文章于 2020-03-08 22:05:15 发布