Pagini recente » Cod sursa (job #2294595) | Cod sursa (job #2326455) | Cod sursa (job #1244535) | Cod sursa (job #2394285) | Cod sursa (job #893008)
Cod sursa(job #893008)
#include <cstdio>
#include <cstring>
using namespace std;
int mat[505][505];
char s1[505],s2[505];
int l1,l2,i,j;
int maxv,maxnr;
int maxim(int a,int b,int c) {
if (a>=b && a>=c) return a;
if (b>=a && b>=c) return b;
return c;
}
int main() {
freopen("subsir.in","r",stdin);
freopen("subsir.out","w",stdout);
scanf("%s %s",s1,s2);
l1 = strlen(s1);
l2 = strlen(s2);
for (i=l1;i>=1;i--) s1[i] = s1[i-1];
for (i=l2;i>=1;i--) s2[i] = s2[i-1];
for (i=1;i<=l2;i++) {
for (j=1;j<=l1;j++) {
if (s1[j] == s2[i]) mat[i][j] = mat[i-1][j-1] +1;
else mat[i][j] = maxim(mat[i-1][j],mat[i-1][j-1],mat[i][j-1]);
if (mat[i][j] == maxv && mat[i][j] != maxim(mat[i-1][j],mat[i-1][j-1],mat[i][j-1])) maxnr++;
else if (mat[i][j] > maxv) {
maxnr = 1;
maxv = mat[i][j];
}
}
}
printf("%d %d",maxnr,maxv);
}