Cod sursa(job #792844)

Utilizator Robert29FMI Tilica Robert Robert29 Data 30 septembrie 2012 22:15:13
Problema Iv Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.03 kb
#include<stdio.h>
#include<cstring>
FILE*f=fopen("iv.in","r");
FILE*g=fopen("iv.out","w");
char v[502],w[502];
int n,m,a[502][502],b[502][502],sol,mod;
int main()
{
	fscanf(f,"%s%s",v+1,w+1);
	n=strlen(v+1);
	m=strlen(w+1);
	int x=(n+m)/2;
	mod=3210121;
	
	a[0][0]=1;
	
	
	for(int i=1;i<=x;++i)
	{
		
		for(int j=0;j<=n&&i-j<=m;++j)
			for(int k=0;k<=n&&i-k<=m&&j+k<=n&&i+i-j-k<=m;++k)
			{
				if(j&&n-k+1<=n&&v[j]==v[n-k+1])
					b[j][k]=(b[j][k]+a[j-1][k-1])%3210121;
				if(i-j>0&&n-i+k+1<=m&&w[i-j]==w[n-i+k+1])
					b[j][k]=(b[j][k]+a[j][k])%mod;
				if(j&&n-i+k+1<=m&&v[j]==w[n-i+k+1])
					b[j][k]=(b[j][k]+a[j-1][k])%mod;
				if(i-j>0&&n-k+1<=n&&w[i-j]==v[n-k+1])
					b[j][k]=(b[j][k]+a[j][k-1])%mod;
			}
		
		for(int j=0;j<=n&&i-j<=m;++j)
			for(int k=0;k<=n&&i-k<=m&&j+k<=n&&i+i-j-k<=m;++k)
				a[j][k]=b[j][k];
	}
	
	for(int j=0;j<=n&&x-j<=m;++j)
		for(int k=0;k<=n&&x-k<=m&&j+k<=n&&x+x-j-k<=m;++k)
			sol=(sol+a[j][k])%mod;
	
	
	fprintf(g,"%d",sol);
	
	
	fclose(f);
	fclose(g);
	return 0;
}