Pagini recente » Monitorul de evaluare | Monitorul de evaluare | Cod sursa (job #189008)
Cod sursa(job #189008)
/*
ID:andrei.9
LANG:C++
TASK:calfflac
*/
#include <cstdio>
#include <string>
using namespace std;
#define MAX_SUB 2000
#define MAX_S 20000
string S,R,P,Sol;
int poz[MAX_S],nrsp;
void read(void);
void solve(void);
bool pal(int, int);
inline int min(int, int);
int main()
{
freopen("calfflac.in","rt",stdin);
freopen("calfflac.out","wt",stdout);
read();
solve();
}
bool pal(int i, int j)
{
string s,r;
s = P.substr(i,j - i + 1);
r = R.substr(P.size() - j - 1, j - i + 1);
if(s == r)
return true;
return false;
}
void read()
{
char c;
int N;
while(scanf("%c",&c) != EOF)
{
S += c;
if(isalpha(c))
{
P += tolower(c);
poz[P.size() - 1] = S.size() - 1;
}
else
++nrsp;
}
for(int i=0; i<(N = P.size()); ++i)
R += P[N - i - 1];
}
void solve()
{
int nr, maxnr = 0;
int N = P.size(), L = min(N, (MAX_SUB - nrsp + 1));
for(int i=0; i < N; ++i)
for(int j = i + 3; j < 1311; ++j)
if(pal(i,j))
if(j - i > maxnr)
{
maxnr = j - i + 1;
Sol = S.substr(poz[i],poz[j]-poz[i]+1);
}
printf("%d\n%s\n",maxnr,Sol.c_str());
}
inline int min(int a, int b)
{
return (a < b)? a : b;
}