Cod sursa(job #357477)

Utilizator bent_larsenSturzu Antonio-Gabriel bent_larsen Data 19 octombrie 2009 14:37:08
Problema Subsir Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.22 kb
#include<stdio.h>
#include<string.h>
#include<vector>

using namespace std;

int max(int a,int b)
{
	if(a>b)
		return a;
	return b;
}

int main()
{
	pair <int,int> a[50][50];
	int i,j,n,m;
	char s1[501],s2[501];
	FILE *f=fopen("subsir.in","r");

	fscanf(f,"%s",s1);
	fscanf(f,"%s",s2);
	fclose(f);
	n=strlen(s1);
	m=strlen(s2);

	for(i=0;i<n;i++)
		for(j=0;j<m;j++)
			a[i][j].second=0;
	for(i=0;i<=max(n,m);i++)
	{
		a[i][0].first=0;
		a[i][0].second=1;
	}
		
	for(i=0;i<=max(n,m);i++)
	{
		a[0][i].first=0;
		a[0][i].second=1;
	}
	
	for(i=1;i<n;i++)
		for(j=1;j<m;j++)
		{
			if(s1[i]==s2[j])
			{
				a[i][j].first=a[i-1][j-1].first+1;
				a[i][j].second+=a[i-1][j-1].second;
				if(a[i-1][j].first==a[i][j].first)
					a[i][j].second+=a[i-1][j].second;
				if(a[i][j-1].first==a[i][j].first)
					a[i][j].second+=a[i][j-1].second;
			}
			else
			{
				if(a[i][j-1].first>a[i-1][j].first)
				{
					a[i][j].first=a[i][j-1].first;
					a[i][j].second+=a[i][j-1].second;
				}
				else
				{
					a[i][j].first=a[i][j-1].first;
					a[i][j].second+=a[i-1][j].second;
				}
			}
		}
	f=fopen("subsir.out","w");
	fprintf(f,"%i\n",a[n-1][m-1].second);
	fclose(f);
	return 0;
}