Pagini recente » Cod sursa (job #2270345) | Cod sursa (job #2101461) | Cod sursa (job #304937) | Cod sursa (job #3198392) | Cod sursa (job #2253058)
#include <cstdio>
#define MOD 3210121
#define DIM 501
using namespace std;
char v[DIM],w[DIM];
int d[2][DIM][DIM];
int main()
{
FILE *fin=fopen ("iv.in","r");
FILE *fout=fopen ("iv.out","w");
int n,m,t,k,i,j,s,ai,as,bi,bs;
char c;
n=m=0;
c=fgetc (fin);
while (c!='\n'){
v[++n]=c;
c=fgetc (fin);
}
c=fgetc (fin);
while (c!='\n'){
w[++m]=c;
c=fgetc (fin);
}
/// d[t][i][j] la pasul t, nr palind cu i de la int lui v si j de la sf lui v
t=1;
if (v[1]==v[n])
d[0][1][1]=1;
if (v[1]==w[m])
d[0][1][0]=1;
if (w[1]==v[n])
d[0][0][1]=1;
if (w[1]==w[n])
d[0][0][0]=1;
for (k=2;k<=(n+m)/2-(n+m)%2;k++){
for (i=0;i<=n && i<=k;i++)
for (j=0;j+i<=n && j<=k;j++){
//if (i==0 && j==2)
// printf ("a");
ai=i;
as=n-j+1;
bi=k-i;
bs=m-(k-j)+1;
d[t][i][j]=0;
if (ai>0 && as<=n && v[ai]==v[as])
d[t][i][j]=(d[t][i][j]+d[1-t][i-1][j-1])%MOD;
if (ai>0 && bs<=m && v[ai]==w[bs])
d[t][i][j]=(d[t][i][j]+d[1-t][i-1][j])%MOD;
if (bi>0 && bs<=m && w[bi]==w[bs])
d[t][i][j]=(d[t][i][j]+d[1-t][i][j])%MOD;
if (bi>0 && as<=n && w[bi]==v[as])
d[t][i][j]=(d[t][i][j]+d[1-t][i][j-1])%MOD;
//printf ("%d %d %d\n",i,j,d[t][i][j]);
}
t=1-t;
}
t=1-t;
s=0;
if ((n+m)%2==0){
for (i=0;i<=n;i++)
s=(s+d[t][i][n-i])%MOD;
}
else {
for (i=0;i<n;i++)
s=(s+d[t][i][n-i-1])%MOD;
}
fprintf (fout,"%d",s);
return 0;
}