Cod sursa(job #184289)

Utilizator savimSerban Andrei Stan savim Data 23 aprilie 2008 13:19:57
Problema Iv Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.95 kb
#include <stdio.h>
#include <string.h>
#define prim 3210121
#define maxl 510

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; i++)
		for (j=0; j<=n; j++)
			for (k=0; k<=m; k++)
			if (c[i][j][k]!=0)
			{
			   if (s1[j+1]==s2[m-k]) c[i+1][j+1][k+1]=(c[i+1][j+1][k+1]+c[i][j][k])%prim;
			   if (j+1!=n-(i-k))
				   if (s1[j+1]==s1[n-(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-(i-k)]) c[i+1][j][k]=(c[i+1][j][k]+c[i][j][k])%prim;
			   if (i-j+1!=m-k)
				   if (s2[i-j+1]==s2[m-k]) 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<=m; j++)
			sum=(sum+c[t][i][j])%prim;

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

	return 0;
}