Pagini recente » Cod sursa (job #1043270) | Cod sursa (job #1077421) | Cod sursa (job #2690664) | Cod sursa (job #80874) | Cod sursa (job #143178)
Cod sursa(job #143178)
#include<fstream.h>
#include<string.h>
#define Nmax 505
int nr[Nmax][Nmax],nr1[Nmax][Nmax],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++)
{
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];
if(s2[a]==s1[n1-i+b+1]&&a>0&&n1-i+b+1>0&&n1-i+b+1<=n1)
nr[a][b]+=nr1[a-1][b];
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];
if(s2[a]==s2[n2-b+1]&&a>0&&b>0&&n2-b+1>0&&n2+b+1<=n2)
nr[a][b]+=nr1[a-1][b-1];
}
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,sol=0;
ofstream g("iv.out");
for(i=0;i<=n2;i++)
sol+=nr[i][n2-i];
if((n1+n2)%2)
for(i=0;i<n2;i++)
sol+=nr[i][n2-i-1];
g<<sol;
g.close();
}