Cod sursa(job #443676)

Utilizator pitradaPit-Rada Ionel-Vasile pitrada Data 17 aprilie 2010 20:25:45
Problema Subsir Scor 0
Compilator c Status done
Runda Arhiva de probleme Marime 0.88 kb
#include<stdio.h>
char a[502], b[502];
int x[501][501];
long y[501][501];
int m,n,i,j,k,u,v;

int main()
{
freopen("subsir.in","r",stdin);
freopen("subsir.out","w",stdout);

scanf("%s\n%s",a+1,b+1);

m=1;while (a[m++]);
n=1;while (b[n++]);

for (j=0;j<=n;j++)x[0][j]=0;
for (i=0;i<=m;i++)x[i][0]=0;
for (i=1;i<=m;i++)
	for (j=1;j<=n;j++)
		if (a[i]==b[j]) x[i][j]=1+x[i-1][j-1];
			else if (x[i-1][j]>x[i][j-1]) x[i][j]=x[i-1][j];
				x[i][j]=x[i][j-1];
for (i=1;i<=m;i++)
	for (j=1;j<=n;j++)
		{
		y[i][j]=0;
		if (x[i][j]==1 && a[i]==b[j]) y[i][j]=1;
		}
for (k=2;k<=x[m][n];k++)
	for (i=1;i<=m;i++)
		for (j=1;j<=n;j++)
			if (x[i][j]==k && a[i]==b[j])
				for (u=1;u<i;u++)
					for (v=1;v<j;v++)
						if (x[u][v]==k-1 && a[u]==b[v])
							y[i][j]=(y[i][j]+y[u][v])%666013;
printf("%ld",y[m][n]);

fclose(stdin);
fclose(stdout);
return 0;
}