Pagini recente » Cod sursa (job #1245582) | Cod sursa (job #2284284) | Cod sursa (job #6261) | Cod sursa (job #1547824) | Cod sursa (job #2475464)
#include <bits/stdc++.h>
#define Nmax 1026
using namespace std;
ifstream fin ("cmlsc.in");
ofstream fout ("cmlsc.out");
int a[ Nmax ][ Nmax ];
int n,m, maxim;
vector < char > v1, v2, sol;
void citesc ();
void process();
void afisare ();
int main()
{
citesc();
process();
afisare();
}
void process()
{
bool k = 0;
for ( int j = 0; j < m; j++ )
{
if ( v1[0] == v2[j] )
k = 1 , sol.push_back(v1[0]), maxim = 1;
a[1][1+j] = k;
}
for ( int i = 2; i <= n; i++ )
for ( int j = 1; j <= m; j++ )
{
if ( v1[i-1] == v2[j-1] )
{
a[i][j] = a[i-1][j-1]+1;
if ( a[i][j] > maxim )
{
maxim = a[i][j];
sol.push_back(v1[i-1]);
}
}
else
a[i][j]= max (a[i-1][j],a[i][j-1]);
}
}
void citesc ()
{
int x;
fin >> n >> m;
v1.reserve ( n+2 );
v2.reserve ( m+2 );
sol.reserve( min(n,m) + 2 );
for ( int i = 0; i < n; i++ )
{
fin >> x;
v1.push_back(x);
}
for ( int i = 0; i < m; i++ )
{
fin >> x;
v2.push_back(x);
}
fin.close();
}
void afisare ()
{
fout << maxim << '\n';
int lng = sol.size();
for ( int i = 0; i < lng; i++ )
fout << int(sol[i]) << ' ';
fout.close();
}