Cod sursa(job #184444)

Utilizator savimSerban Andrei Stan savim Data 23 aprilie 2008 17:41:59
Problema Iv Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.1 kb
#include <stdio.h>
#include <string.h>
#define prim 3210121
#define maxl 510

long i,j,k,n,m,t,sum,l;
long c[2][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;
	l=0;
	for (i=0; i<=t-1; i++)
	{
		l=1-l;

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

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

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

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

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

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

	return 0;
}