#include <cstdio>
#include <algorithm>
#include <vector>
#include <cstring>
#include <cstdlib>
using namespace std;
#define rep(i,n) for(int (i)=(0);(i)<(n);(i)++)
#define repn(i,a,n) for(int (i)=(a);(i)<(n);(i)++)
#define pb push_back
#define mp make_pair
typedef pair<int,int> pii;
typedef pair<int,pii> pip;
#define fi first
#define se second
typedef long long ll;
char s[300010];
char tmp[600020];
int rad[600020];
int N;
void manacher() {
rep(i,N*2+1)tmp[i]='#';
rep(i,N)tmp[i*2+1]=s[i];
int i=0,j=0;
int n=N*2+1;
for(int i=0;i<n;) {
while(i-j>=0&&i+j<n&&tmp[i-j]==tmp[i+j])j++;
rad[i]=j;
int k=1;
while(rad[i-k]<rad[i]-k)rad[i+k]=rad[i-k],k++;
i+=k;
j=max(0,j-k);
}
}
int sa[300001],ra[300001],sak;
int ti[300001];
int lcp[300001];
bool cmp_sa(int a,int b) {
if(ra[a]!=ra[b])return ra[a]<ra[b];
int cha=(a+sak<=N)?ra[a+sak]:-1;
int chb=(b+sak<=N)?ra[b+sak]:-1;
return cha<chb;
}
void construct_sa(int n) {
rep(i,n+1) {
sa[i]=i;
ra[i]=(i<n)?s[i]:-1;
}
for(sak=1;sak<n;sak*=2) {
sort(sa,sa+n+1,cmp_sa);
ti[sa[0]]=0;
for(int i=1;i<=n;i++)ti[sa[i]]=ti[sa[i-1]]+cmp_sa(sa[i-1],sa[i]);
rep(i,n+1)ra[i]=ti[i];
}
}
void construct_lcp(int n) {
rep(i,n+1)ti[sa[i]]=i;
int h=0, j;
rep(i,n) {
j=sa[ti[i]-1];
if(h>0)h--;
while(i+h<n&&j+h<n&&s[i+h]==s[j+h])h++;
lcp[ti[i]]=h;
}
}
struct UnionFind {
int par[300001],ra[300001],sz[300001];
void init(){rep(i,300001)par[i]=i,ra[i]=0,sz[i]=0;}
int find(int x){return par[x]==x?x:par[x]=find(par[x]);}
bool same(int a,int b){return find(a)==find(b);}
void unite(int a,int b){if((a=find(a))!=(b=find(b))){if(ra[a]<ra[b])swap(ra[a],ra[b]);sz[a]+=sz[b];par[b]=a,ra[a]+=ra[a]==ra[b];}}
} uf;
int main() {
gets(s);
ll ans=0;
N=strlen(s);
manacher();
construct_sa(N);
construct_lcp(N);
vector<pip> lun;
repn(i,1,N+1)lun.pb(mp(lcp[i],mp(sa[i-1],sa[i])));
sort(lun.rbegin(),lun.rend());
uf.init();
vector<pii> aq;
rep(i,N)aq.pb(mp(rad[i*2+1]/2,i));
sort(aq.rbegin(),aq.rend());
int ptr=0, ppuf;
rep(i,N) {
while(ptr<N&&lun[ptr].fi>=aq[i].fi) {
uf.unite(lun[ptr].second.first,lun[ptr].second.second);
ptr++;
}
ppuf=uf.find(aq[i].se);
uf.sz[ppuf]++;
ans=max(ans,ll(uf.sz[ppuf])*(aq[i].first*2-1));
}
uf.init();
aq.clear();
rep(i,N)aq.pb(mp(rad[i*2]/2,i));
sort(aq.rbegin(),aq.rend());
ptr=0;
rep(i,N) {
while(ptr<N&&lun[ptr].fi>=aq[i].fi) {
uf.unite(lun[ptr].second.first,lun[ptr].second.second);
ptr++;
}
ppuf=uf.find(aq[i].se);
uf.sz[ppuf]++;
ans=max(ans,ll(uf.sz[ppuf])*(aq[i].first*2));
}
printf("%lld",ans);
}
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
0 ms |
12644 KB |
Output is correct - answer is '7' |
2 |
Correct |
0 ms |
12644 KB |
Output is correct - answer is '4' |
3 |
Correct |
0 ms |
12644 KB |
Output is correct - answer is '9' |
4 |
Correct |
0 ms |
12644 KB |
Output is correct - answer is '1' |
5 |
Correct |
4 ms |
12644 KB |
Output is correct - answer is '1' |
6 |
Correct |
0 ms |
12644 KB |
Output is correct - answer is '2' |
7 |
Correct |
0 ms |
12644 KB |
Output is correct - answer is '3' |
8 |
Correct |
0 ms |
12644 KB |
Output is correct - answer is '3' |
9 |
Correct |
0 ms |
12644 KB |
Output is correct - answer is '15' |
10 |
Correct |
0 ms |
12644 KB |
Output is correct - answer is '24' |
11 |
Correct |
0 ms |
12644 KB |
Output is correct - answer is '10' |
12 |
Correct |
0 ms |
12644 KB |
Output is correct - answer is '24' |
13 |
Correct |
0 ms |
12644 KB |
Output is correct - answer is '25' |
14 |
Correct |
0 ms |
12644 KB |
Output is correct - answer is '28' |
15 |
Correct |
0 ms |
12644 KB |
Output is correct - answer is '2' |
16 |
Correct |
0 ms |
12644 KB |
Output is correct - answer is '1' |
17 |
Correct |
0 ms |
12644 KB |
Output is correct - answer is '15' |
18 |
Correct |
0 ms |
12644 KB |
Output is correct - answer is '18' |
19 |
Correct |
0 ms |
12644 KB |
Output is correct - answer is '1176' |
20 |
Correct |
0 ms |
12644 KB |
Output is correct - answer is '1225' |
21 |
Correct |
0 ms |
12644 KB |
Output is correct - answer is '136' |
22 |
Correct |
0 ms |
12644 KB |
Output is correct - answer is '45' |
23 |
Correct |
0 ms |
12644 KB |
Output is correct - answer is '2500' |
24 |
Correct |
0 ms |
12644 KB |
Output is correct - answer is '380' |
25 |
Correct |
4 ms |
12644 KB |
Output is correct - answer is '2304' |
26 |
Correct |
0 ms |
12644 KB |
Output is correct - answer is '110' |
27 |
Correct |
4 ms |
12644 KB |
Output is correct - answer is '93' |
28 |
Correct |
0 ms |
12644 KB |
Output is correct - answer is '729' |
29 |
Correct |
0 ms |
12644 KB |
Output is correct - answer is '132' |
30 |
Correct |
0 ms |
12644 KB |
Output is correct - answer is '7' |
31 |
Correct |
0 ms |
12644 KB |
Output is correct - answer is '8' |
32 |
Correct |
4 ms |
12644 KB |
Output is correct - answer is '64' |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
4 ms |
12644 KB |
Output is correct - answer is '124251' |
2 |
Correct |
0 ms |
12644 KB |
Output is correct - answer is '38226' |
3 |
Correct |
4 ms |
12644 KB |
Output is correct - answer is '249500' |
4 |
Correct |
4 ms |
12644 KB |
Output is correct - answer is '5778' |
5 |
Correct |
4 ms |
12644 KB |
Output is correct - answer is '247506' |
6 |
Correct |
4 ms |
12644 KB |
Output is correct - answer is '248004' |
7 |
Correct |
4 ms |
12644 KB |
Output is correct - answer is '973' |
8 |
Correct |
4 ms |
12644 KB |
Output is correct - answer is '123753' |
9 |
Correct |
0 ms |
12644 KB |
Output is correct - answer is '2346' |
10 |
Correct |
4 ms |
12644 KB |
Output is correct - answer is '53' |
11 |
Correct |
0 ms |
12644 KB |
Output is correct - answer is '52' |
12 |
Correct |
4 ms |
12644 KB |
Output is correct - answer is '976' |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
16 ms |
13028 KB |
Output is correct - answer is '12497500' |
2 |
Correct |
16 ms |
13028 KB |
Output is correct - answer is '6481800' |
3 |
Correct |
16 ms |
13028 KB |
Output is correct - answer is '25000000' |
4 |
Correct |
16 ms |
13028 KB |
Output is correct - answer is '17816841' |
5 |
Correct |
16 ms |
13028 KB |
Output is correct - answer is '9945' |
6 |
Correct |
16 ms |
13028 KB |
Output is correct - answer is '504100' |
7 |
Correct |
16 ms |
13028 KB |
Output is correct - answer is '1512930' |
8 |
Correct |
16 ms |
13028 KB |
Output is correct - answer is '413' |
9 |
Correct |
16 ms |
13028 KB |
Output is correct - answer is '428' |
10 |
Correct |
20 ms |
13028 KB |
Output is correct - answer is '7232' |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
216 ms |
16740 KB |
Output is correct - answer is '1249925001' |
2 |
Correct |
212 ms |
16464 KB |
Output is correct - answer is '396337935' |
3 |
Correct |
208 ms |
16236 KB |
Output is correct - answer is '2500050000' |
4 |
Correct |
212 ms |
16236 KB |
Output is correct - answer is '1016525689' |
5 |
Correct |
372 ms |
16236 KB |
Output is correct - answer is '99645' |
6 |
Correct |
316 ms |
16236 KB |
Output is correct - answer is '78569380' |
7 |
Correct |
252 ms |
16236 KB |
Output is correct - answer is '82810000' |
8 |
Correct |
220 ms |
16236 KB |
Output is correct - answer is '3989' |
9 |
Correct |
232 ms |
16236 KB |
Output is correct - answer is '125529616' |
10 |
Correct |
372 ms |
16236 KB |
Output is correct - answer is '66664' |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
784 ms |
28740 KB |
Output is correct - answer is '11250075000' |
2 |
Correct |
896 ms |
27100 KB |
Output is correct - answer is '894243195' |
3 |
Correct |
724 ms |
26988 KB |
Output is correct - answer is '22499400004' |
4 |
Correct |
772 ms |
26988 KB |
Output is correct - answer is '2958163321' |
5 |
Execution timed out |
1000 ms |
26988 KB |
Program timed out |
6 |
Halted |
0 ms |
0 KB |
- |