Cod sursa(job #401336)

Utilizator antoanelaAntoanela Siminiuc antoanela Data 22 februarie 2010 19:34:17
Problema Iv Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.96 kb
#include <cstdio>
#include <cstring>
#define lm 550

char A[lm], B[lm];
int la, lb, v[15][15][15][15];

int main()
{
	freopen("iv.in","r",stdin);
	freopen("iv.out","w",stdout);
	scanf("%s",A);
	scanf("%s",B);
	la=strlen(A);
	lb=strlen(B);
	int i, j, y, t;
	for (i=la; i>0; i--) A[i]=A[i-1];
	for (i=lb; i>0; i--) B[i]=B[i-1];
	for (i=1; i<=la; i++)
		for (j=1; j<=lb; j++) 
			if (A[i]==B[j]) v[i][i][j][j]=2;
	for (i=1; i<=la; i++)
		for (j=1; j<=lb; j++)
			for (y=1; y<j; y++) v[i][j][j][y]=1;
	for (i=1; i<=la; i++)
		for (j=1; j<i; j++)
			for (y=1; y<=lb; y++) v[i][j][y][y]=1;
	for (i=la; i>0; i--)
		for (j=i-1; j<=la; j++)
			for (y=lb; y>0; y--)
				for (t=y-1; t<=lb; t++)
				{
					if (A[i]==A[j]) v[i][j][y][t]+=v[i+1][j-1][y][t];
					if (B[y]==B[t]) v[i][j][y][t]+=v[i][j][y+1][t-1];
					if (B[y]==A[j]) v[i][j][y][t]+=v[i][j-1][y+1][t];
					if (A[i]==B[t]) v[i][j][y][t]+=v[i+1][j][y][t-1];
				}
	printf("%d",v[1][la][1][lb]);
}