显示代码纯文本
#include<iostream>
#include<string>
#include<cstring>
#include<cstdio>
#define pos(i,a,b) for(int i=(a);i<=(b);i++)
#define pos2(i,a,b) for(int i=(a);i>=(b);i--)
#define N 1010000
using namespace std;
char a[N];
int len;
int cnt[N];
int fail[N];
void getfail()
{
int k=0;
fail[0]=fail[1]=0;
pos(i,2,len)
{
while(k&&a[k]!=a[i-1])
k=fail[k];
if(a[k]==a[i-1])
k++;
fail[i]=k;
}
}
int haha()
{
freopen("string_maxval.in","r",stdin);
freopen("string_maxval.out","w",stdout);
scanf("%s",a);
len=strlen(a);
getfail();
pos2(i,len,1)
{
cnt[i]++;
cnt[fail[i]]+=cnt[i];
}
long long ans=0;
pos(i,1,len)
{
if(i*cnt[i]>ans)
ans=i*cnt[i];
}
printf("%lld",ans);
//while(1);
return 0;
}
int sb=haha();
int main()
{;
}