比赛 NOIP模拟赛by mzx Day2 评测结果 WWWWTTTEEE
题目名称 拯救紫萱学姐 最终得分 0
用户昵称 Ostmbh 运行时间 3.435 s
代码语言 C++ 内存使用 21.95 MiB
提交时间 2016-10-20 21:55:09
显示代码纯文本
#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <cmath>
#include <vector>
using namespace std;
bool f[5010][5010]={0};
int low[5010];
string s[5010];
int last[5010]={0};
int maxx[5010]={0};
vector<int>A[5010];
int main(){
	freopen("savemzx.in","r",stdin);
	freopen("savemzx.out","w",stdout);
	char c;
	s[0]="";
	while(c<'a'||c>'z')
		c=getchar();
	int cnt=0;
	while(c>='a'&&c<='z'){
		cnt++;
		s[cnt]=s[cnt-1]+c;
		c=getchar();
	}
	memset(low,127,sizeof(low));
	for(int i=1;i<=cnt;i++){
		for(int j=1;j<=i;j++)
			if(s[j]+s[i-j]==s[i]){
				f[i][j]=1;
				A[i].push_back(j);
				if(abs(j-(i/2))<low[i])
					low[i]=j;
				if(j>maxx[i])
					maxx[i]=j;
			}
	}
	int ans=0;
	for(int i=1;i<=cnt;i++){
		for(int j=1;j<=i;j++){
			int kd=-1;
			for(int k=A[i].size()-1;k>=1;k--)
				if(f[j][A[i][k]]){
					kd=A[i][k];
					break;
				}
			if(kd==-1)
				kd=0;
			ans=max(ans,(i-kd)*(i-kd)-2*(i-kd)*low[i-kd]+2*low[i-kd]*low[i-kd]);
		}
	}
	printf("%d\n",ans);
return 0;
}