Pagini recente » Cod sursa (job #1282308) | Cod sursa (job #2119920) | Cod sursa (job #2693568) | Cod sursa (job #1063607) | Cod sursa (job #545848)
Cod sursa(job #545848)
#include <stdio.h>
#define LIM 1025
FILE *f=fopen("cmlsc.in", "r"), *g=fopen("cmlsc.out", "w");
int i, j, m, n, t=1, a[LIM], b[LIM], v[LIM][LIM], rez[LIM];
void citeste()
{
fscanf(f, "%d%d", &m, &n);
for (i=1;i<=m;i++)
fscanf(f, "%d", &a[i]);
for (i=1;i<=n;i++)
fscanf(f, "%d", &b[i]);
}
void matrice()
{
int t;
if (m>n)
t=n;
else
t=m;
for (i=1;i<=t;i++)
{
for (j=i;j<=n;j++)
{
if (v[i-1][j]>v[i][j-1])
v[i][j]=v[i-1][j];
else
v[i][j]=v[i][j-1];
if (a[i]==b[j])
v[i][j]++;
}
for (j=i+1;j<=m;j++)
{
if (v[j-1][i]>v[j][i-1])
v[j][i]=v[j-1][i];
else
v[j][i]=v[j][i-1];
if (a[j]==b[i])
v[j][i]++;
}
}
}
void reconstituie(int m, int n)
{
if (v[m-1][n]||v[m][n-1])
{
if (v[m-1][n]<v[m][n]&&v[m][n-1]<v[m][n])
rez[t++]=a[m];
if (v[m-1][n]>v[m][n-1])
reconstituie(m-1, n);
else
reconstituie(m, n-1);
}
else
rez[t]=a[m];
}
void tipareste()
{
fprintf(g, "%d\n", v[m][n]);
for (i=t;i>0;i--)
fprintf(g, "%d ", rez[i]);
fclose(f);
fclose(g);
}
int main()
{
citeste();
matrice();
reconstituie(m, n);
tipareste();
return 0;
}