Cod sursa(job #528736)

Utilizator thesilverhand13FII Florea Toma Eduard thesilverhand13 Data 3 februarie 2011 12:57:34
Problema Subsir Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.71 kb
#include<fstream>
#include<string>
#define dim 502
#define modulo 666013
using namespace std;
ifstream f("subsir.in");
ofstream g("subsir.out");

char a[dim],b[dim];
int a1[dim],b1[dim];
int lungimea,lungimeb;
int sol[dim][dim];
int nr[dim];
int n,m;
int inc;
int maxim;
int solutii;

void citire()
{
	f.get(a,dim);
	f.get();
	f.get(b,dim);
	f.get();
}

void afisare()
{
	int i,j,k,ok=0;
	/*g<<a<<"\n";
	g<<b<<"\n";
	for(i=1;i<=lungimea;i++)
		g<<a1[i]<<" ";
	g<<"\n";
	for(j=1;j<=lungimeb;j++)
		g<<b1[j]<<" ";
	g<<"\n";
	g<<"\n";
	for(i=1;i<=n;i++)
	{
		for(j=1;j<=m;j++)
			g<<sol[i][j]<<" ";
		g<<"\n";
	}
	g<<"\n";
	g<<sol[n][m]<<"\n";
	for(i=inc;i>=1;i--)
		g<<nr[i]<<" ";
	g<<"\n";
	*/
	for(i=n;i>=1;i--)
	{
		for(j=m;j>=i+1;j--)
			if(nr[j]==b1[j]&&ok==0)
			{
				ok=1;
				solutii++;
				b1[j]=0;
			}
		
	}
	g<<solutii;//<<"\n";
}

void rezolva()
{
	int i,j;
	lungimea=strlen(a);
	lungimeb=strlen(b);
	
	for(i=0;i<lungimea;i++)
		a1[i+1]=a[i]-'0';
	for(i=0;i<lungimeb;i++)
		b1[i+1]=b[i]-'0';
	
	n=lungimea;
	m=lungimeb;
	for(i=1;i<=n;i++)
		for(j=1;j<=m;j++)
			if(a1[i]==b1[j])
				sol[i][j]=sol[i-1][j-1]+1;
			else
				if(sol[i-1][j]>sol[i][j-1])
					sol[i][j]=sol[i-1][j];
				else
					sol[i][j]=sol[i][j-1];
				maxim=sol[n][m];

}
void afisaresub()
{
	int i,j;
	i=n,j=m;
	while(i!=0&&j!=0)
	{
		if(a1[i]==b1[j])
		{
			inc++;
			nr[inc]=a1[i];
			b1[j]=0;
			//if(sol[i][j]==maxim)
			sol[i][j]=0;
			i--;
			j--;
		}
		else
			if(sol[i][j]==sol[i-1][j])
				i--;
			else
				if(sol[i][j]==sol[i][j-1])
				j--;
	}
}
int main()
{
	citire();
	rezolva();
	
	
		
		
	afisaresub();
	afisare();
	return 0;
}