Pagini recente » Cod sursa (job #2124672) | Cod sursa (job #2660554) | Cod sursa (job #1289710) | Cod sursa (job #1171335) | Cod sursa (job #1337336)
#include<cstdio>
using namespace std;
int d[501][502];
char ce[501][501];
char a[501];
char b[501];
int cnt(int x,int y){
int rez=0,k1=0,k2=0;
if (x==0 ||y==0) return 0;
if (a[x]==b[y] &&d[x][y]==d[x-1][y-1]+1){
k1=ce[x][y];
rez=cnt(x-1,y-1);
if (rez==0) rez=1;
}
if (d[x][y]==d[x-1][y] &&k1!=ce[x-1][y]){
k2=ce[x-1][y];
rez+=cnt(x-1,y);
}
if (d[x][y]==d[x][y-1] &&k1!=ce[x][y-1] &&k2!=ce[x][y-1])
rez+=cnt(x,y-1);
return rez;
}
int main(){
freopen ("subsir.in","r",stdin);
freopen ("subsir.out","w",stdout);
int n,m,i,j;
gets(a+1);
gets(b+1);
n=1;
while(a[n+1]!=0) n++;
m=1;
while(b[m+1]!=0) m++;
for(i=1;i<=n;i++)
for(j=1;j<=m;j++){
if (a[i]==b[j]){
d[i][j]=d[i-1][j-1]+1;
ce[i][j]=a[i];
}
if (d[i-1][j]>d[i][j]){
d[i][j]=d[i-1][j];
ce[i][j]=ce[i-1][j];
}
if (d[i][j-1]>d[i][j]){
d[i][j]=d[i][j-1];
ce[i][j]=ce[i][j-1];
}
}
printf ("%d",cnt(n,m));
return 0;
}