记录编号 107283 评测结果 AAAAAAAA
题目名称 回文串 最终得分 100
用户昵称 GravatarHouJikan 是否通过 通过
代码语言 C++ 运行时间 0.030 s
提交时间 2014-06-23 22:50:16 内存使用 0.70 MiB
显示代码纯文本
#include <iostream>
#include <cstring>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <algorithm>
#include <queue>
#include <stack>
#include <map>
#include <set>
#include <vector>
#include <ctime>
#include <functional>
#define pritnf printf
#define scafn scanf
#define FOR(i,k,j) for(int i=k;i<=j;i++)
typedef long long LL;
typedef unsigned int Uint;
const int INF=0x7ffffff;
using namespace std;
string first="";
string text="",i;
int position[100000];
int main()
{  
  freopen("calfflac.in","r",stdin);
  freopen("calfflac.out","w",stdout); 
  char ch;
  while (scanf("%c",&ch)!=EOF)
    first+=ch;
  int len=first.length();
  int now=0;
  for(int i=0;i<len;i++)
    if (isalpha(first[i]))
    {
      if (first[i]>='a')
        text+=first[i]-'a'+'A';
      else
        text+=first[i];
      position[now++]=i;
    }
  //cout<<text<<endl;
  len=text.length();
  int maxn=0;
  int maxpos;
  int left;
  bool odd;
  for(int mid=1;mid<len;mid++)
  {
    left=1;
    while (mid-left>=0&&mid+left<len&&text[mid-left]==text[mid+left])
      left++;
    left--;
    if (left*2+1>maxn)
    {
      maxn=left*2+1;
      odd=true;
      maxpos=mid;
    }
    left=0;
    while (mid-left>=0&&mid+left+1<len&&text[mid-left]==text[mid+left+1])
      left++;
    left--;
    if (left*2+2>maxn)
    {
      maxn=left*2+2;
      odd=false;
      maxpos=mid;
    }
  }
  printf("%d\n",maxn);
  if (odd)
    for(int pos=position[maxpos-(maxn-1)/2];pos<=position[maxpos+(maxn-1)/2];pos++)
      printf("%c",first[pos]);
  else
    for(int pos=position[maxpos-(maxn-2)/2];pos<=position[maxpos+(maxn-2)/2+1];pos++)
      printf("%c",first[pos]);
  return 0;
}