记录编号 441614 评测结果 AAAAAAAAAA
题目名称 拯救紫萱学姐 最终得分 100
用户昵称 Gravatarxzz_233 是否通过 通过
代码语言 C++ 运行时间 0.432 s
提交时间 2017-08-25 11:49:02 内存使用 39.39 MiB
显示代码纯文本
// It is made by XZZ
#include<cstdio>
#include<algorithm>
#include<cstring>
#define Fname "savemzx"
using namespace std;
#define rep(a,b,c) for(rg int a=b;a<=c;a++)
#define drep(a,b,c) for(rg int a=b;a>=c;a--)
#define erep(a,b) for(rg int a=fir[b];a;a=nxt[a])
#define il inline
#define rg register
#define vd void
typedef long long ll;
il int gi(){
    rg int x=0,f=1;rg char ch=getchar();
    while(ch<'0'||ch>'9')f=ch=='-'?-1:f,ch=getchar();
    while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar();
    return x*f;
}
const int maxn=1000005;
char str[maxn];
int Nxt[maxn];
int id,fir[maxn],nxt[maxn],dis[maxn];
ll w[maxn],Fir[maxn],Sec[maxn];
il vd add(int a,int b){nxt[++id]=fir[a],fir[a]=id,dis[id]=b,w[id]=((ll)a-b)*(a-b);}
ll ans=0;
il vd Updata(ll&a,ll&b,ll c){
    if(c>a)b=a,a=c;
    else if(c>b)b=c;
}
il vd L(int now){
    Fir[now]=Sec[now]=0;
    erep(i,now){
	L(dis[i]);
	Updata(Fir[now],Sec[now],Fir[dis[i]]+w[i]);
    }
    ans=max(ans,Fir[now]+Sec[now]);
}
int main(){
    freopen(Fname".in","r",stdin);
    freopen(Fname".out","w",stdout);
    scanf("%s",str+1);
    int len=strlen(str+1);
    Nxt[0]=0;
    Nxt[1]=0;
    rep(i,2,len){
	int k=Nxt[i-1];
	while(k&&str[k+1]!=str[i])k=Nxt[k];
	if(str[k+1]==str[i])++k;
	Nxt[i]=k;
    }
    rep(i,1,len)add(Nxt[i],i);
    L(0);
    printf("%lld\n",ans);
    return 0;
}