思路是暴搜。
需要注意的地方是输入的方法,以及输出时的换行。
代码:
/*
ID: who jay
LANG: C++
TASK: calfflac
*/
#include<stdio.h>
#include<string.h>
#include<math.h>
int main()
{
freopen("calfflac.in","r",stdin);
freopen("calfflac.out","w",stdout);
char s[20001]= {0},cr[20001]= {0};
int i;
int len;
int maxlen=0,maxu,maxv,u,v,tmplen;
char line[81];
while(gets(line)!=NULL)
{
strcat(s,line);
cr[strlen(s)-1]=1;
}
len=strlen(s);
for(i=0; i<len; i++)
{
if((s[i]<'A')||(s[i]>'Z')&&(s[i]<'a')||(s[i]>'z'))
continue;
//奇数时
u=v=i;
tmplen=-1;
while((u>=0)&&(v<=len-1))
{
if((s[u]!=s[v])&&(fabs(s[u]-s[v])!=32))
break;
tmplen+=2;
if(tmplen>maxlen)
{
maxlen=tmplen;
maxu=u;
maxv=v;
}
u--;
v++;
while((u>=0)&&((s[u]<'A')||(s[u]>'Z')&&(s[u]<'a')||(s[u]>'z')))
u--;
while((v<=len-1)&&((s[v]<'A')||(s[v]>'Z')&&(s[v]<'a')||(s[v]>'z')))
v++;
}
//偶数时
u=i;
v=i+1;
tmplen=0;
while((u>=0)&&(v<=len-1))
{
if((s[u]!=s[v])&&(fabs(s[u]-s[v])!=32))
break;
tmplen+=2;
if(tmplen>maxlen)
{
maxlen=tmplen;
maxu=u;
maxv=v;
}
u--;
v++;
while((u>=0)&&((s[u]<'A')||(s[u]>'Z')&&(s[u]<'a')||(s[u]>'z')))
u--;
while((v<=len-1)&&((s[v]<'A')||(s[v]>'Z')&&(s[v]<'a')||(s[v]>'z')))
v++;
}
}
printf("%d\n",maxlen);
for(i=maxu; i<=maxv; i++)
{
printf("%c",s[i]);
if(cr[i]==1) printf("\n");
}
if(cr[maxv]!=1) printf("\n");
return 0;
}