Cod sursa(job #245028)

Utilizator smash91devilAndrei Ionut Adrian smash91devil Data 16 ianuarie 2009 15:59:24
Problema Subsir Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.15 kb
#include<iostream.h>
#include<string.h>
#include<fstream.h>

char a[100],b[100];
int n,m ;
int lung[100][100];





void construire(char a[100],char b[100],int &l)
{ int i,j;
n=strlen(a)-1;
m=strlen(b)-1;

if (a[0]==b[0])
	lung[0][0]=1;
else
 lung[0][0]=0;

for (i=0;i<=n-1;i++)
  if (a[i]==b[0])
	lung[i][0]=1;
  else lung[i][0]=lung[i-1][0];

for (j=1;j<=m-1;j++)
  if (a[0]==b[j])
    lung[0][j]=1;
  else
     lung[0][j]=lung[0][j-1];
int max;
for (i=1;i<=n-1;i++)

   for (j=1;j<=m-1;j++)
      {if (a[i]==b[j])
			max=lung[i-1][j-1]+1;
	   else max=0;
	   if (max<lung[i-1][j])
			max=lung[i-1][j];
		if (max<lung[i][j-1])
			max=lung[i][j-1];
      lung[i][j]=max;
      }

 
  
 cout<<"subsirul comun maxim are lungimea "<<
l=lung[n-1][m-1];
 cout<<endl;
 cout<<"subsirul este:";
 
 
 i=n-1;
 j=m-1;
 while (i>=0 && j>=0)
   { if (a[i]==b[j])
      {cout<<a[i];
      i--;j--;
      }
     else
       if (i-1>=0 && lung[i][j]==lung[i-1][j] )
	  i--;
       else j--;
   }
}




void main()
{ 
cin.get(a,100);
cin.get();
cin.get(b,100);
cin.get();
  construire(a,b);
construire(a,b,l)
 
}