Pagini recente » Cod sursa (job #2898144) | Cod sursa (job #2793077) | Cod sursa (job #2282661) | Borderou de evaluare (job #1567135) | Cod sursa (job #158537)
Cod sursa(job #158537)
#include<stdio.h>
#include<string.h>
FILE *f,*g;
char s1[501],s2[501],cuv[501][501]; int a[501][501],b[501][501],i,j,nr,ok,n,m,k,dis;
int max(int a,int b)
{ if(a>=b) return a;
return b;
}
int main()
{ f=fopen("subsir.in","r"); g=fopen("subsir.out","w");
fscanf(f,"%s%s",s1,s2); n=strlen(s1); m=strlen(s2);
for(i=0;i<n;i++) for(j=0;j<m;j++)
if(s1[i]==s2[j]) { a[i+1][j+1]=a[i][j]+1; b[i+1][j+1]=1; }
else a[i+1][j+1]=max(a[i][j-1],a[i+1][j]);
for(i=1;i<=n;i++)for(j=1;j<=m;j++)
if(a[i][j]==a[n][m]&&b[i][j])
{ nr++;
for(k=0;k<=a[n][m]-1;k++) cuv[nr][a[n][m]-k-1]=s1[i-k-1];
}
dis=0;
for(i=1;i<=nr;i++)
{ ok=1;
for(j=i+1;j<=nr;j++) if(strcmp(cuv[i],cuv[j])==0) ok=0;
dis+=ok;
}
fprintf(g,"%d",dis);
fclose(g);
return 0;
}