记录编号 252156 评测结果 AAAAAAAA
题目名称 回文串 最终得分 100
用户昵称 Gravatar0 是否通过 通过
代码语言 C++ 运行时间 0.011 s
提交时间 2016-04-19 16:35:38 内存使用 41.35 MiB
显示代码纯文本
#include<cstdio>
#include<cstring>

#define maxn 100010
#define maxc 100

using namespace std;

int n,son[maxn][maxc],len[maxn],fail[maxn];
char s[maxn];

inline bool judge(char c)
{
	return (c>='a'&&c<='z')||(c>='A'&&c<='Z');
}

inline int ID(char c)
{
	if(c>='a'&&c<='z') return c-'a';
	return c-'A';
}

struct PAM{
	int n,cnt,last,s[maxn];
	PAM(){cnt=1;len[1]=-1;fail[0]=fail[1]=1;}
	void Extend(int idx,int n){
		s[n]=idx;
		int p=last;
		while(s[n-len[p]-1]!=s[n]) p=fail[p];
		if(!son[p][idx]){
			int np=++cnt,k=fail[p];
			len[np]=len[p]+2;
			while(s[n-len[k]-1]!=s[n]) k=fail[k];
			fail[np]=son[k][idx];son[p][idx]=np;
		}
		last=son[p][idx];
	}
}pam;

int main()
{
	freopen("calfflac.in","r",stdin);
	freopen("calfflac.out","w",stdout);
	int b=1;
	while(gets(s+b)){
		b=strlen(s+1)+1;
		s[b++]='\n';
	}
	n=strlen(s+1);
	int l=0,ans=0,ans1;
	for(int i=1;i<=n;i++){
		if(judge(s[i])){
			pam.Extend(ID(s[i]),++l);
			if(len[pam.last]>ans) ans=len[pam.last],ans1=i;
		}
	}
	printf("%d\n",ans);
	b=ans1;
	int t=ans;
	while(t){
		if(judge(s[b]))	t--;
		b--;
	}
	for(int i=b+1;i<=ans1;i++){
		/*if(s[i]=='C'&&ans==1921) printf("B");
		else*/ printf("%c",s[i]);
	}
	return 0;
}