比赛 NOIP模拟赛by mzx Day2 评测结果 WAWWWWAEEE
题目名称 拯救紫萱学姐 最终得分 20
用户昵称 旺仔小馒头 运行时间 1.564 s
代码语言 C++ 内存使用 1.93 MiB
提交时间 2016-10-20 21:53:49
显示代码纯文本
#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;
			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;
}