Pagini recente » Cod sursa (job #429594) | Cod sursa (job #2559053) | Cod sursa (job #2521603) | Cod sursa (job #2970234) | Cod sursa (job #1092963)
#include<stdio.h>
int a[501],b[501];
int cmlsc[501][501],sol[501][501];
inline int maxof2(int a,int b)
{
if(a>b)
return a;
return b;
}
int main()
{
FILE *fin,*fout;
fin=fopen("subsir.in","r");
fout=fopen("subsir.out","w");
int n,m,cont=0;
char c=fgetc(fin);
while(c!='\n')
{
cont++;
a[cont]=c;
c=fgetc(fin);
}
n=cont;
cont=0;
c=fgetc(fin);
while(c!='\n')
{
cont++;
b[cont]=c;
c=fgetc(fin);
}
m=cont;
int i;
for(i=0; i<=n; i++)
sol[i][0]=1;
for(i=0; i<=m; i++)
sol[0][i]=1;
int j;
for(i=1; i<=n; i++)
for(j=1; j<=m; j++)
{
if(a[i]==b[j])
{
cmlsc[i][j]=1+cmlsc[i-1][j-1];
sol[i][j]=sol[i-1][j-1];
}
else
{
if(cmlsc[i-1][j]>cmlsc[i][j-1])
{
cmlsc[i][j]=cmlsc[i-1][j];
sol[i][j]=sol[i-1][j];
}
else if(cmlsc[i][j-1]>cmlsc[i-1][j])
{
cmlsc[i][j]=cmlsc[i][j-1];
sol[i][j]=sol[i][j-1];
}
else
{
cmlsc[i][j]=cmlsc[i-1][j];
sol[i][j]=(sol[i][j-1]+sol[i-1][j])%666013;
if(cmlsc[i-1][j-1]==cmlsc[i-1][j])
sol[i][j]=((sol[i][j]-sol[i-1][j-1])+666013)%666013;
}
}
}
fprintf(fout,"%d\n",sol[n][m]);
return 0;
}