先吐槽:USACO 6.2开始加的题居然有好多training上第一第二章的……
这道题简单,注意的一点是,判断回文串时不考虑标点什么的但是最后答案要求输出的需要带标点
不多说,上代码
/*
ID: xsy97051
LANG: C++
TASK: calfflac
*/
#include <cstdio>
#include <string>
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
char a[20005],b[20005],c;
int ba[20005],d[20005],r=0,rpos=0;
int ai=0,bi=0;
freopen("calfflac.in","r",stdin);
freopen("calfflac.out","w",stdout);
while(scanf("%c",&c)!=EOF)
{
a[ai]=c;
if(c>='a'&&c<='z'||c>='A'&&c<='Z')
{
b[bi]=c;
if(c>='A'&&c<='Z')b[bi]+='a'-'A';
ba[bi]=ai;
bi++;
}
ai++;
}
d[0]=1;
for(int i=1;i<bi;i++)
{
if(b[i]==b[i-d[i-1]-1])
d[i]=d[i-1]+2;
else
if(b[i]==b[i-1])
d[i]=2;
else
d[i]=1;
if(d[i]>r)
{
r=d[i];
rpos=i;
}
}
cout<<r<<endl;
for(int i=ba[rpos-r+1];i<=ba[rpos];i++)
cout<<a[i];
cout<<endl;
return 0;
}