比赛 NOIP模拟赛by mzx Day2 评测结果 RRRRRRRRRR
题目名称 森林大礼包 最终得分 0
用户昵称 404 运行时间 0.032 s
代码语言 C++ 内存使用 16.54 MiB
提交时间 2016-10-20 20:29:25
显示代码纯文本
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#define ll long long
#define ull unsigned long long
using namespace std;
int n;ll ans;
char s[1001000];
ll   f[1001000];
ull  g[1001000];
ll calc(int x,int y){return (y-x)*(y-x);}
void get()
{
  f[0]=0,f[1]=0;
  for(int i=2;i<=n;i++)
  {
	  int j=f[i-1];
	  while(j&&s[i]!=s[j+1])j=f[j];
	  f[i]= s[i]==s[j+1]?j+1:0;
	  ans=max(ans,calc(i,f[i]));
  }
}
void work1()
{
   for(int i=1;i<=n;i++)
   {
	   for(int j=1;j<i;j++)
	   {
		   int x=i,y=j;
		   ll res=0;
		   while(x!=y)
		   {
                       if(x>=y)res+=(ll)(x-f[x])*(x-f[x]),x=f[x];
		       else res+=(ll)(y-f[y])*(y-f[y]),y=f[y];
		   }ans=max(ans,res);
	   }
   }cout<<ans<<endl;
}
int main()
{
	freopen("savemzx.in","r",stdin);
	freopen("savemzx.out","w",stdout);
   	scanf("%s",s+1);n=strlen(s+1);
	get();work1();
}