Pagini recente » Cod sursa (job #2797333) | Istoria paginii runda/preoji_2 | Istoria paginii runda/ceau_oni2017_2 | Cod sursa (job #174086) | Cod sursa (job #330370)
Cod sursa(job #330370)
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int v[1025][1025], t1[1025], t2[1025], n,m;
int main()
{
freopen ("cmlsc.in", "r", stdin);
scanf("%i %i", &n,&m);
for (int i=1; i<=n; i++)
{
scanf("%i ", &t1[i]);
}
for (int i=1; i<=m; i++)
{
scanf("%i ", &t2[i]);
}
fclose(stdin);
for (int i=1; i<=n; i++)
{
for (int j=1; j<=m; j++)
{
if (t1[i]==t2[j])
{
v[i][j]=v[i-1][j-1]+1;
}
else if(v[i-1][j]>v[i][j-1])
{
v[i][j]=v[i-1][j];
}
else v[i][j]=v[i][j-1];
}
}
freopen ("cmlsc.out", "w", stdout);
int max=v[n][m];
for (int i=1; i<=n; i++)
{
for (int j=1; j<=n; j++)
{
if(max<v[i][j])
max=v[i][j];
}
}
vector <int> v2;
printf("%i\n", max);
while(n>=0 && m>=0)
{
if (t1[n]==t2[m])
{
v2.push_back(t1[n]);
n--;
m--;
}
else if (v[n-1][m]>v[n][m-1])
{
n--;
}
else m--;
}
for (int i=v2.size()-1; i>=0; i--)
printf("%i ", v2.at(i));
fclose(stdout);
return 0;
}