Cod sursa(job #287428)

Utilizator razvan_3dragomir razvan razvan_3 Data 24 martie 2009 21:03:53
Problema Subsir Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.21 kb
#include<fstream.h>
#include<string.h>
ifstream intrare("subsir.in");
ofstream iesire("subsir.out");
char a[501],b[501];
int m[501][501];
long int val[501][501];
int n1,n2;
void citeste()
{
	intrare>>a>>b;
	n1=strlen(a);
	n2=strlen(b);
}
int minim(int i,int j)
{
	if(i>j)return j;
	return i;
}
int maxim(int i,int j)
{
	if(i>j)return i;
	return j;
}
int main()
{
	citeste();
	int i,j,grad;
	for(i=0;i<n1;i++)
	{
		for(j=0;j<n2;j++)
		{
			if(a[i]==b[j])
			{
				m[i][j]=minim(m[i][j-1],m[i-1][j])+1;
				if(m[i][j]==1)val[i][j]=1;
				if(m[i][j]>m[i-1][j]&&m[i-1][j]==m[i][j-1])
				{

					iesire<<a[i]<<" ";

				}
				else iesire<<"x ";
			}
			else
			{
				m[i][j]=maxim(m[i][j-1],m[i-1][j]);
				iesire<<m[i][j]<<" ";
			}
			//if(m[i][j]==1)val[i][j]=1;
			if(val[i][j]==0)
			{
					if(m[i-1][j-1]<m[i][j]&&m[i][j]==m[i-1][j]&&m[i][j]==m[i][j-1])
					{
						val[i][j]=val[i][j-1]+val[i-1][j];
					}
					else
					{
						val[i][j]=maxim(val[i][j-1],val[i-1][j]);
					}
			 }
		}
		iesire<<"\n";
	}
	iesire<<val[n1-1][n2-1]<<"\n";
	for(i=0;i<n1;i++)
	{
		for(j=0;j<n2;j++)
		{
			iesire<<val[i][j]<<" ";
		}
		iesire<<"\n";
	}



	return 0;
}