Cod sursa(job #830289)

Utilizator roots4Irimia Alexandru Gabriel roots4 Data 6 decembrie 2012 16:45:55
Problema Iv Scor 45
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.07 kb
#include<fstream>
#include<string.h>
#define mod 3210121
#define DIM 510
using namespace std;

ifstream f("iv.in");
ofstream g("iv.out");

int a_max,b_max,total,i,j,k,sum;
char a[DIM],b[DIM];
int Cr[DIM][DIM],Ant[DIM][DIM];

int main(){
	
	f>>(a+1)>>(b+1);
	
	a_max=strlen(a+1);
	b_max=strlen(b+1);
	total=a_max+b_max;
	
	if(a[1]==a[a_max])
		Ant[1][1]=1;
	if(a[1]==b[b_max])
		Ant[1][0]=1;
	if(b[1]==b[b_max])
		Ant[0][0]=1;
	if(b[1]==a[a_max])
		Ant[0][1]=1;
	
	for(i=2;i<=total/2;i++){
		for(j=0;j<=a_max;j++){
			for(k=0;k<=a_max;k++){
				if((2*i-j-k)<=b_max&&(j+k)<=a_max){
					if(a[j]==a[a_max-k+1])
						Cr[j][k]+=Ant[j-1][k-1];
					if(a[j]==b[b_max-(i-k)+1])
						Cr[j][k]+=Ant[j-1][k];
					if(b[i-j]==b[b_max-(i-k)+1])
						Cr[j][k]+=Ant[j][k];
					if(b[i-j]==a[a_max-k+1])
						Cr[j][k]+=Ant[j][k-1];
					while(Cr[j][k]>=mod)
						Cr[j][k]-=mod;
				}
			}
		}
		memcpy(Ant,Cr,sizeof(Cr));
		memset(Cr,0,sizeof(Cr));
	}
	
	for(i=0;i<=a_max;i++)
		for(j=0;j<=a_max;j++)
			sum+=Ant[i][j];
	
	g<<sum;
	
	return 0;
}