Pagini recente » Cod sursa (job #1060355) | Cod sursa (job #1368848) | Cod sursa (job #1410084) | Cod sursa (job #2100967) | Cod sursa (job #37557)
Cod sursa(job #37557)
#include <stdio.h>
#include <math.h>
#define fin "elimin2.in"
#define fout "elimin2.out"
#define Dim 2048
char buf[Dim];
int poz = 0;
void cit(char &x)
{
x=0;
x=buf[poz++]-'0';
}
char x[2048];
char v[2048];
int b[2001][2001];
char k[2001][2001];
int max(int A,int B)
{
if(A>B)
return A;
else
return B;
}
void rec(int x,int y)
{
if(x<1 || y<1)
return ;
if(k[x][y] == 3)
{
printf("%d", v[x]);
rec(x-1,y-1);
}
else
if(k[x][y] == 1)
rec(x,y-1);
else
if(k[x][y] == 2)
rec(x-1,y);
}
int main()
{
freopen(fin,"r",stdin);
freopen(fout,"w",stdout);
fgets(buf,Dim,stdin);
int n = 0, i,j;
while(buf[poz] != '\n')
{
++n;
cit(v[n]);
}
for(i=1;i<=n;++i)
x[n-i+1] = v[i];
for(i=1;i<=n;++i)
for(j=1;j<=n;++j)
{
if(v[i] == x[j])
{
b[i][j] = 1+b[i-1][j-1];
k[i][j] = 3;
}
else
if(b[i][j-1] > b[i-1][j])
{
b[i][j] = b[i][j-1];
k[i][j] = 1;
}
else
{
b[i][j] = b[i-1][j];
k[i][j] = 2;
}
}
rec(n,n);
return 0;
}
//by Crawler