Pagini recente » Rating Costan Miriam (CostanMiriam) | Cod sursa (job #474077)
Cod sursa(job #474077)
#include<stdio.h>
#include<string.h>
#define maxim(a,b) (a>b ? a : b)
int sol[503][503];
int d[503][503],p[32];
char s1[506],s2[506];
int ap1[506][32],n2;
int ap2[506][32],n1;
int main ()
{
int i,j,t;
freopen("subsir.in","r",stdin);
freopen("subsir.out","w",stdout);
gets(s1);
gets(s2);
n1=strlen(s1);
n2=strlen(s2);
for(i=0;i<n1;i++)
{
for(j=0;j<26;j++)
ap1[i][j]=p[j];
p[s1[i]-'a']=i+1;
}
memset(p,0,sizeof(p));
for(i=0;i<n2;i++)
{
for(j=0;j<26;j++)
ap2[i][j]=p[j];
p[s2[i]-'a']=i+1;
}
sol[0][0]=1;
for(i=1;i<=n1;i++)
for(j=1;j<=n2;j++)
{
if(s1[i-1]==s2[j-1])
{
d[i][j]=d[i-1][j-1]+1;
sol[i][j]=sol[i-1][j-1];
if(!sol[i][j])
sol[i][j]=1;
continue;
}
d[i][j]=maxim(d[i-1][j],d[i][j-1]);
for(t=0;t<26;t++)
{
if(!ap1[i][t] || !ap2[j][t])
continue;
if(d[ap1[i][t]][ap2[j][t]]+1==d[i][j])
sol[i][j]+=sol[ap1[i][t]][ap2[j][t]];
}
}
printf("%d\n",sol[n1][n2]);
return 0;
}