Cod sursa(job #158537)

Utilizator adrianraduleaRadulea Adrian adrianradulea Data 13 martie 2008 18:01:45
Problema Subsir Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.79 kb
#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;
}