Pagini recente » Cod sursa (job #1237983) | Cod sursa (job #880755) | Cod sursa (job #2308581) | Cod sursa (job #1422031) | Cod sursa (job #12052)
Cod sursa(job #12052)
#include <stdio.h>
#include <string.h>
#define maxn 20
#define mod 3210121
char a[maxn],b[maxn];
int n,m,sol;
int c[maxn][maxn],d[maxn][maxn];
void move(char a[],int n)
{
int i;
for (i=n;i>0;i--) a[i]=a[i-1];
a[0]=' ';
}
int main()
{
freopen("iv.in","r",stdin);
freopen("iv.out","w",stdout);
fgets(a,maxn,stdin);
fgets(b,maxn,stdin);
n=strlen(a)-1;
move(a,n);
m=strlen(b)-1;
move(b,m);
int i,j,k,x,y,z,t;
c[0][0]=1;
for (i=0;i<(n+m)/2;i++)
{
for (j=0;(j<=i) && (j<=n);j++)
for (k=0;(k<=i) && (k<=n);k++)
{
d[j][k]=c[j][k];
c[j][k]=0;
}
for (j=0;(j<=i) && (j<=n);j++)
for (k=0;(k<=i) && (k<=n);k++)
if (d[j][k]!=0)
{
x=j+1;
y=n-k;
z=i-j+1;
t=m-(i-k);
if ((x>0) && (y>0) && (x<=n) && (y<=n) && (x<y) && (a[x]==a[y]))
{
c[j+1][k+1]+=d[j][k];
if (c[j+1][k+1]>mod) c[j+1][k+1]-=mod;
}
if ((z>0) && (z<=m) && (y>0) && (y<=n) && (x>0) && (t>0) && (x<=n) && (t<=m))
{
if (a[x]==b[t])
{
c[j+1][k]+=d[j][k];
if (c[j+1][k]>mod) c[j+1][k]-=mod;
}
if (a[y]==b[z])
{
c[j][k+1]+=d[j][k];
if (c[j][k+1]>mod) c[j][k+1]-=mod;
}
}
if ((z>0) && (t>0) && (z<=m) && (t<=m) & (z<t) && (b[z]==b[t]))
{
c[j][k]+=d[j][k];
if (c[j][k]>mod) c[j][k]-=mod;
}
}
}
for (i=0;i<=n;i++)
for (j=0;j<=n;j++)
{
sol+=c[i][j];
if (sol>mod) sol-=mod;
}
printf("%d\n",sol);
return 0;
}