Pagini recente » Cod sursa (job #2972213) | Cod sursa (job #92970) | Cod sursa (job #2187217) | Cod sursa (job #427574) | Cod sursa (job #37661)
Cod sursa(job #37661)
#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; ) {
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--;
}
}
}
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;
}