记录编号 |
326623 |
评测结果 |
AAATTTTEEE |
题目名称 |
拯救紫萱学姐 |
最终得分 |
30 |
用户昵称 |
旺仔小馒头 |
是否通过 |
未通过 |
代码语言 |
C++ |
运行时间 |
5.347 s |
提交时间 |
2016-10-21 11:14:36 |
内存使用 |
1.55 MiB |
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<cstring>
#define maxn 100010
#define ll long long
using namespace std;
ll n,ans,fail[maxn],p,f[maxn];
char s[maxn];
int main()
{
freopen("savemzx.in","r",stdin);
freopen("savemzx.out","w",stdout);
scanf("%s",s+1);
n=strlen(s+1);
for(int i=2;i<=n;i++){
p=fail[i-1];
while(p&&s[p+1]!=s[i])p=fail[p];
if(s[p+1]==s[i])p++;
fail[i]=p;
}
for(int i=1;i<=n;i++)
for(int j=i+1;j<=n;j++){
ll mx=0;memset(f,0,sizeof(f));
for(int k=1;k<=i;k++)f[i]=0;
p=i;while(p){
f[fail[p]]=f[p]+(p-fail[p])*(p-fail[p]);
p=fail[p];
}
p=j;while(p){
mx+=(p-fail[p])*(p-fail[p]);
p=fail[p];mx+=f[p];if(f[p])break;
}
ans=max(ans,mx);
}
cout<<ans<<endl;
return 0;
}