Pagini recente » Cod sursa (job #321232) | Cod sursa (job #3194412) | Cod sursa (job #1861329) | Cod sursa (job #1358096) | Cod sursa (job #357477)
Cod sursa(job #357477)
#include<stdio.h>
#include<string.h>
#include<vector>
using namespace std;
int max(int a,int b)
{
if(a>b)
return a;
return b;
}
int main()
{
pair <int,int> a[50][50];
int i,j,n,m;
char s1[501],s2[501];
FILE *f=fopen("subsir.in","r");
fscanf(f,"%s",s1);
fscanf(f,"%s",s2);
fclose(f);
n=strlen(s1);
m=strlen(s2);
for(i=0;i<n;i++)
for(j=0;j<m;j++)
a[i][j].second=0;
for(i=0;i<=max(n,m);i++)
{
a[i][0].first=0;
a[i][0].second=1;
}
for(i=0;i<=max(n,m);i++)
{
a[0][i].first=0;
a[0][i].second=1;
}
for(i=1;i<n;i++)
for(j=1;j<m;j++)
{
if(s1[i]==s2[j])
{
a[i][j].first=a[i-1][j-1].first+1;
a[i][j].second+=a[i-1][j-1].second;
if(a[i-1][j].first==a[i][j].first)
a[i][j].second+=a[i-1][j].second;
if(a[i][j-1].first==a[i][j].first)
a[i][j].second+=a[i][j-1].second;
}
else
{
if(a[i][j-1].first>a[i-1][j].first)
{
a[i][j].first=a[i][j-1].first;
a[i][j].second+=a[i][j-1].second;
}
else
{
a[i][j].first=a[i][j-1].first;
a[i][j].second+=a[i-1][j].second;
}
}
}
f=fopen("subsir.out","w");
fprintf(f,"%i\n",a[n-1][m-1].second);
fclose(f);
return 0;
}