Cod sursa(job #184439)

Utilizator savimSerban Andrei Stan savim Data 23 aprilie 2008 17:34:22
Problema Iv Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.01 kb
#include <stdio.h>
#include <string.h>
#define prim 3210121
#define maxl 210

long i,j,k,n,m,t,sum;
long c[maxl][maxl][maxl];
char s1[maxl],s2[maxl];

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

	scanf("%s",s1+1);s1[0]=' ';
	n=strlen(s1)-1;
	scanf("%s",s2+1);s2[0]=' ';
	m=strlen(s2)-1;


	c[0][0][0]=1;t=(m+n)/2;

	for (i=0; i<=t-1; i++)
		for (j=0; j<=n; j++)
			for (k=0; k<=n; k++)
			if (c[i][j][k]!=0)
			{
				if (s1[j+1]==s1[n-k] && j+1<n-k)
					c[i+1][j+1][k+1]=(c[i+1][j+1][k+1]+c[i][j][k])%prim;

				if (s2[i-j+1]==s2[m-(i-k)] && i-j+1<m-(i-k))
					c[i+1][j][k]=(c[i+1][j][k]+c[i][j][k])%prim;

				if (s1[j+1]==s2[m-(i-k)] && j+1<n-k+1 && i-j<m-(i-k))
					c[i+1][j+1][k]=(c[i+1][j+1][k]+c[i][j][k])%prim;

				if (s2[i-j+1]==s1[n-k] && j<n-k && i-j+1<m-(i-k)+1)
					c[i+1][j][k+1]=(c[i+1][j][k+1]+c[i][j][k])%prim;
			}


	for (i=0; i<=n; i++)
		for (j=0; j<=n; j++)
			sum=(sum+c[t][i][j])%prim;

	printf("%ld\n",sum);

	return 0;
}