Pagini recente » Cod sursa (job #2785609) | Cod sursa (job #1122544) | Cod sursa (job #2682369) | Cod sursa (job #2188693) | Cod sursa (job #199729)
Cod sursa(job #199729)
#include <stdio.h>
#include <string.h>
#define NMAX 520
#define FIN "subsir.in"
#define FOUT "subsir.out"
#define MOD 666013
int N,M;
char A[NMAX],B[NMAX];
int i,j;
int nr[NMAX][NMAX],c[NMAX][NMAX];
void read()
{
freopen(FIN,"rt",stdin);
freopen(FOUT,"wt",stdout);
scanf("%s\n", &A+1);
scanf("%s\n", &B+1);
N=strlen(A+1);
M=strlen(B+1);
for (i=1;i<=N;i++)
c[i][0]=1;
for (j=1;j<=M;j++)
c[0][j]=1;
}
void write()
{
printf("%d",c[N][M]);
}
void programare_dinamica()
{
for (i=1;i<=N;i++)
for (j=1;j<=M;j++)
{
if (A[i]==B[j])
{
nr[i][j]=nr[i-1][j-1]+1;
c[i][j]=c[i-1][j-1];
}
else
if (nr[i-1][j]==nr[i][j-1])
{
nr[i][j]=nr[i-1][j];
c[i][j]=(c[i-1][j]+c[i][j-1])%MOD;
if (nr[i-1][j]==nr[i-1][j-1])
c[i][j]=(c[i][j]-c[i-1][j-1])%MOD;
}
else
if (nr[i-1][j]>nr[i][j-1])
{
nr[i][j]=nr[i-1][j];
c[i][j]=c[i-1][j];
}
else
if (nr[i-1][j]<nr[i][j-1])
{
nr[i][j]=nr[i][j-1];
c[i][j]=c[i][j-1];
}
}
}
int main()
{
read();
programare_dinamica();
write();
return 0;
}