比赛 |
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;
}