Pagini recente » Cod sursa (job #1260092) | Cod sursa (job #486079) | Cod sursa (job #85616) | Cod sursa (job #2902595) | Cod sursa (job #37868)
Cod sursa(job #37868)
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
#define FIN "elimin2.in"
#define FOUT "elimin2.out"
#define MAX 2048
#define b(i) a[n-i-1]
char a[MAX], act[MAX], M[MAX];
short L[MAX][MAX];
long i, n, j;
void get(long x, long y) {
long i, j;
long p = 0;
for (i=x, j=y; i && j && 2*(p+1)<=(L[n][n]+1); ) {
if ( a[i]==b(j) ) {
act[p++] = a[i-1];
i--, j--;
}
else {
if ( L[i][j-1] > L[i-1][j] )
j--;
else
i--;
}
}
i = p;
if ( L[n][n] % 2 )
p--;
for (--p; p>=0; --p)
act[i++] = act[p];
}
int main() {
freopen(FIN,"r", stdin);
fgets(a, 2048, stdin);
fclose(stdin);
for (i=strlen(a); a[i]>'9' || a[i]<'0'; --i)
a[i]=0;
n = strlen(a);
for (i=0; i<n; ++i)
for (j=0; j<n; ++j)
if ( a[i]==b(j) )
L[i+1][j+1] = L[i][j] + 1;
else
L[i+1][j+1] = max(L[i][j+1], L[i+1][j]);
for (i=n; i>=0; --i)
for (j=n; j>=0; --j)
if ( L[i][j] == L[n][n] ) {
get(i,j);
if ( strcmp(act,M)>=1 )
strcpy(M,act);
// printf("%s | %s\n", act, M);
}
freopen(FOUT, "w", stdout);
printf("%s\n", M);
fclose(stdout);
return 0;
}