Pagini recente » Cod sursa (job #2144455) | Cod sursa (job #2289467) | Cod sursa (job #694002) | Cod sursa (job #933296) | Cod sursa (job #143183)
Cod sursa(job #143183)
#include<fstream.h>
#include<string.h>
#define Nmax 55
#define konst 3210121
int long nr[Nmax][Nmax],nr1[Nmax][Nmax];
int n1,n2;
char s2[Nmax],s1[Nmax];
void citire();
void afisare();
void initializare()
{if(s2[1]==s2[n2])
nr1[1][1]=1;
if(s2[1]==s1[n1])
nr1[1][0]=1;
if(s1[1]==s2[n2])
nr1[0][1]=1;
if(s1[1]==s1[n1])
nr1[0][0]=1;
}
void dinamica()
{int i,a,b;
for(i=2;i<=(n1+n2)/2;i++)
{memset(nr,0,sizeof(nr));
for(a=0;a<=n2&&a<=i;a++)
for(b=0;b<=n2-a;b++)
{if(s1[i-a]==s1[n1-i+b+1]&&i-a>0&&i-a<=n1&&n1-i+b+1>0&&n1-i+b+1<=n1)
nr[a][b]=(nr1[a][b]+nr[a][b])%konst;
if(s2[a]==s1[n1-i+b+1]&&a>0&&n1-i+b+1>0&&n1-i+b+1<=n1)
nr[a][b]=(nr[a][b]+nr1[a-1][b])%konst;
if(s1[i-a]==s2[n2-b+1]&&i-a>0&&i-a<=n1&&n2-b+1>0&&n2-b+1<=n2&&b>0)
nr[a][b]=(nr1[a][b-1]+nr[a][b])%konst;
if(s2[a]==s2[n2-b+1]&&a>0&&b>0&&n2-b+1>0)
nr[a][b]=(nr[a][b]+nr1[a-1][b-1])%konst;
}
memcpy(nr1,nr,sizeof(nr));
}
}
int main()
{citire();
initializare();
dinamica();
afisare();
return 0;
}
void citire()
{char s3[Nmax];
ifstream f("iv.in");
f>>s1>>s2;
n1=strlen(s1);
n2=strlen(s2);
s3[0]='1';s3[1]=NULL;
strcat(s3,s1);
memcpy(s1,s3,sizeof(s3));
s3[0]='1';s3[1]=NULL;
strcat(s3,s2);
memcpy(s2,s3,sizeof(s3));
}
void afisare()
{int i,j;
int long sol=0;
ofstream g("iv.out");
for(i=0;i<=n2;i++)
sol=(sol+nr1[i][n2-i])%konst;
if((n1+n2)%2)
for(i=0;i<n2;i++)
sol=(sol+nr1[i][n2-i-1])%konst;
g<<sol;
g.close();
}