Cod sursa(job #37557)

Utilizator crawlerPuni Andrei Paul crawler Data 25 martie 2007 10:57:33
Problema Elimin 2 Scor 0
Compilator cpp Status done
Runda preONI 2007, Runda 4, Clasa a 10-a Marime 1.25 kb
#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