#include<bits/stdc++.h>
#define int unsigned __int128
int n;
int base;
int bas[1000086];
int has[1000086];
int sah[1000086];
inline int read(){
int s=0;
int w=1;
char ch=getchar();
for(;ch<'0'||ch>'9';ch=getchar())
if(ch=='-')
w=-1;
for(;ch>='0' and ch<='9';ch=getchar())
s=s*10+ch-'0';
return s*w;
}
void write(int x){
if(x<0){
putchar('-');
x=-x;
}
if(x>9)
write(x/10);
putchar(x%10+'0');
return;
}
std::string q;
std::string s;
inline int qpow(int b,int p){
int ans=1;
while(p){
if(p&1)
ans=ans*b;
b*=b;
p>>=1;
}
return ans;
}
inline int geths(int l,int r){
return has[r]-has[l-1]*qpow(base,r-l+1);
}
inline int getsh(int l,int r){
return sah[l]-sah[r+1]*qpow(base,r-l+1);
}
int ans;
int cc;
int k;
std::map<int,bool>mp;
signed main(){
// srand(time(NULL));
base=19260817;
n=read();
for(int i=1;i<=n;i++){
int x;
x=read();
s=s+(char)(x+'0');
}
// std::cout<<s;
s=" "+s;
bas[0]=1;
for(int i=1;i<=n;i++)
bas[i]=bas[i-1]*base;
for(int i=1;i<=n;i++)
has[i]=has[i-1]*base+s[i];
for(int i=n;i;i--)
sah[i]=sah[i+1]*base+s[i];
for(int i=1;i<=n;i++){
mp.clear();
int l=1;
int r=l+i-1;
int cnt=0;
while(r<=n){
int hs1=geths(l,r);
int hs2=getsh(l,r);
if((not mp[hs1]) and (not mp[hs2]))
cnt++;
mp[hs1]=mp[hs2]=true;
l+=i;
r=l+i-1;
}
if(cnt>ans){
ans=cnt;
cc=0;
k=i;
}
if(cnt==ans)
cc++;
// puts("debug: ");
// write(cc);
// puts("");
}
write(ans);
putchar(' ');
write(cc);
puts("");
write(k);
return 0;
}
https://www.luogu.com.cn/record/197997275
玄关