Pagini recente » Cod sursa (job #760980) | Cod sursa (job #2736727) | Cod sursa (job #3193479) | Cod sursa (job #1175167) | Cod sursa (job #12059)
Cod sursa(job #12059)
#include <stdio.h>
#define maxx 510
#define mod 3210121
#define maxalf 30
char a[maxx],b[maxx],aux[maxx];
int c[maxx][maxx],d[maxx][maxx],n,m,count[maxalf],count2[maxalf],sol,l,p,q;
int first;
void citire()
{
int i,j,k;
freopen("iv.in","r",stdin);
n=0;
do
{
n++;
scanf("%c",& a[n]);
}
while (a[n]!='\n');
n--;
m=0;
do
{
m++;
scanf("%c",& b[m]);
}
while (b[m]!='\n');
m--;
}
void calc(int i,int j,int k)
{
l=n-k+1;
q=k+m-i+1;
if (p<q)
{
if (a[j]==a[l]) c[j][l]=(c[j][l]+d[j-1][l+1])%mod;
if (a[j]==b[q]) c[j][l]=(c[j][l]+d[j-1][l])%mod;
if (b[p]==a[l]) c[j][l]=(c[j][l]+d[j][l+1])%mod;
if (b[p]==b[q]) c[j][l]=(c[j][l]+d[j][l])%mod;
}
}
void rezolva()
{
d[0][n+1]=1;
d[0][n]=1;
d[1][n]=1;
d[1][n+1]=1;
int i,j,k;
for (i=1;i<=(n+m)/2;i++)
{
for (j=0;j<=n+1;j++)
for (k=0;k<=n+1;k++) c[j][k]=0;
if (i<=n)
for (j=0;j<=i;j++)
{
p=i-j;
if (i<=n-j)
for (k=0;k<=i;k++) calc(i,j,k);
else for (k=0;k<=n-j;k++) calc(i,j,k);
}
else for(j=0;j<=n;j++)
{
p=i-j;
if (i<=n-j)
for (k=0;k<=i;k++) calc(i,j,k);
else for (k=0;k<=n-j;k++) calc(i,j,k);
}
}
sol=0;
for (i=0;i<=n+1;i++) sol=(sol+c[i][i+2])%mod;
for (i=0;i<=n+1;i++) sol=(sol+c[i][i+1])%mod;
}
void afisare()
{
freopen("iv.out","w",stdout);
printf("%d\n",sol);
}
int main()
{
citire();
rezolva();
afisare();
return 0;
}