Pagini recente » Cod sursa (job #896195) | Cod sursa (job #1094431) | Cod sursa (job #2464594) | Cod sursa (job #2325644) | Cod sursa (job #285105)
Cod sursa(job #285105)
#include<stdio.h>
#include<string.h>
#define dim 1024
int a[dim],b[dim],v[dim][dim],nr[dim],x,n,m,i,k;
void read()
{
char q[501];
gets(q);
n=strlen(q);
for(i=0;i<n;i++)
a[i+1]=q[i]-'a';
gets(q);
m=strlen(q);
for(i=0;i<m;i++)
b[i+1]=q[i]-'a';
}
int max(int x,int y)
{
if(x>y)
return x;
return y;
}
void fill()
{
for(i=1;i<=n;i++)
for(k=1;k<=m;k++)
{
if(a[i]==b[k])
v[i][k]=v[i-1][k-1]+1;
else
v[i][k]=max(v[i-1][k],v[i][k-1]);
}
}
/*void find ()
{
for(i=n,k=m;i>=1 && k>=1;i++,i--)
{
if(a[i]==b[k])
{
nr[x++]=a[i];
i--;
k--;
continue;
}
if(v[i-1][k]>v[i][k-1])
i--;
else
k--;
}
printf("%d\n",--x);
for(i=x;i>=1;i--)
printf("%d ",nr[i]);
return ;
}*/
void find()
{
int max=v[n][m],nr=0;
for(i=1;i<n;i++)
for(k=1;k<m;k++)
if(v[i][k]==max-1 && v[i][k+1]!= max && v[i+1][k+1]==max)
nr++;
printf("%d\n",nr);
}
void afis()
{
printf("\n");
for(i=1;i<=m;i++)
printf("%d ",b[i]);
printf("\n");
for(i=1;i<=n;i++,printf("\n"))
{
printf("%d ",a[i]); for(k=1;k<=m;k++)
printf("%d ",v[i][k]);
} printf("\n");
}
void solve()
{
freopen("subsir.in","r",stdin);
freopen("subsir.out","w",stdout);
read();
fill();
find();
// afis();
}
int main ()
{
x=1;
solve();
return 0;
}