Pagini recente » Cod sursa (job #2236276) | Cod sursa (job #2487616) | Cod sursa (job #2541109) | Cod sursa (job #2241909) | Cod sursa (job #2883934)
#include <stdio.h>
int v1[1025];
int v2[1025];
int mat[1025][1025];
int res[1025];
static inline int max(int a, int b) { return a > b ? a : b; }
int main() {
FILE *fin, *fout;
int n, m;
int i, j;
int ind;
fin = fopen("cmlsc.in", "r");
fscanf(fin, "%d", &n);
fscanf(fin, "%d", &m);
for (i = 1; i <= n; i++)
fscanf(fin, "%d", &v1[i]);
for (i = 1; i <= m; i++)
fscanf(fin, "%d", &v2[i]);
fclose(fin);
for (i = 1; i <= n; i++) {
for (j = 1; j <= m; j++) {
if (v1[i] == v2[j])
mat[i][j] = mat[i - 1][j - 1] + 1;
else
mat[i][j] = max(mat[i][j - 1], mat[i - 1][j]);
}
}
fout = fopen("cmlsc.out", "w");
i = n;
j = m;
ind = 0;
fprintf(fout, "%d\n", mat[i][j]);
while (i >= 1 && j >= 1) {
if (v1[i] == v2[j]) {
res[ind++] = v1[i];
i--; j--;
} else {
if (mat[i - 1][j] > mat[i][j - 1])
i--;
else
j--;
}
}
for (ind = mat[n][m] - 1; ind >= 0; ind--)
fprintf(fout, "%d ", res[ind]);
fclose(fout);
return 0;
}