记录编号 327096 评测结果 AAAAAAAAAA
题目名称 拯救紫萱学姐 最终得分 100
用户昵称 Gravatargls1196 是否通过 通过
代码语言 C++ 运行时间 2.337 s
提交时间 2016-10-21 19:46:03 内存使用 64.21 MiB
显示代码纯文本
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<queue>
#include<ctime>
#include<cstdlib>
#include<stack>
#include<queue>
using namespace std;
typedef long long ll;
const int maxn=1000100;
char str[maxn];
ll nxt[maxn],n,he[maxn],ed=0,dis[maxn],q[maxn];
bool vis[maxn];
struct Edge{
	ll v,nx,w;
	Edge(ll x,ll y,ll z){
		v=x;nx=y;w=z;
	}
	Edge(){;}
}e[maxn<<1];
void Add(ll u,ll v,ll w){
	e[++ed]=Edge(v,he[u],w);he[u]=ed;
}
void Gnxt(){ll i,j;
	for(i=2;str[i]!='\0';i++){
		j=nxt[i-1];
		while(j&&str[j+1]!=str[i])j=nxt[j];
		if(str[j+1]==str[i])j++;
		nxt[i]=j;
	}
}
ll Bfs(int st){int h=0,t=0;
	memset(vis,0,sizeof(vis));
	dis[st]=0;vis[st]=1;q[++t]=st;
	while(h<t){
		ll u=q[++h];
		for(ll i=he[u];i;i=e[i].nx){
			ll v=e[i].v;
			if(vis[v])continue;
			dis[v]=dis[u]+e[i].w;
			q[++t]=v;vis[v]=1;
		}
	}ll res=0;
	for(ll i=1;i<=n;i++)
		if(dis[res]<dis[i])res=i;return res;
}
int main(){
	 freopen("savemzx.in","r",stdin);
    freopen("savemzx.out","w",stdout);
	scanf("%s",str+1);n=strlen(str+1);Gnxt();
	for(ll i=1;i<=n;i++){
		Add(nxt[i],i,(i-nxt[i])*(i-nxt[i]));
		Add(i,nxt[i],(i-nxt[i])*(i-nxt[i]));
	}ll res=Bfs(Bfs(0));
	printf("%lld",dis[res]);
}