Pagini recente » Cod sursa (job #2285037) | Cod sursa (job #862252) | Cod sursa (job #110128) | Cod sursa (job #2724446) | Cod sursa (job #1116899)
/*
http://www.infoarena.ro/problema/subsir
*/
#include <cstdio>
#include <string.h>
#define Nmax 505
using namespace std;
FILE *fi = fopen("subsir.in", "r");
FILE *fo = fopen("subsir.out", "w");
char v[Nmax];
char w[Nmax];
int a[Nmax][Nmax];
int n;
int m;
int ct;
int mx = 1<<31;
int maxim(int a, int b)
{
return a > b? a : b;
}
void dinamica()
{
for (int i = 1; i<=m; i++)
{
for (int j = 1; j<=n; j++)
{
if (v[i] == w[j])
a[i][j] = maxim(a[i-1][j-1] + 1, a[i-1][j]);
else
a[i][j] = maxim(a[i-1][j], a[i][j-1]);
if (a[i][j] > mx)
{
mx = a[i][j];
ct = 1;
}
else if (a[i][j] == mx /*&& v[i] == w[j] && a[i-1][j-1] + 1 > a[i-1][j]*/) ct++;
}
}
}
int main()
{
fscanf(fi, "%s", w+1);
fscanf(fi, "%s", v+1);
m = strlen(v+1);
n = strlen(w+1);
dinamica();
/*
for (int i = 1; i<=m; i++)
{
for (int j = 1; j<=n; j++)
printf("%d ", a[i][j]);
printf("\n");
}
//*/
fprintf(fo, "%d", ct);
return 0;
}