Pagini recente » Cod sursa (job #2432292) | Istoria paginii runda/cel_mai_mare_olimpicar1/clasament | Cod sursa (job #736473) | Cod sursa (job #1238144) | Cod sursa (job #2554083)
#include <bits/stdc++.h>
#define FILE_NAME "seif"
#define fast ios_base :: sync_with_stdio(0); cin.tie(0);
#pragma GCC optimize("O3")
#define NMAX 1000010
using namespace std;
ifstream f(FILE_NAME ".in");
ofstream g(FILE_NAME ".out");
typedef long long ll;
typedef long double ld;
typedef pair<ll,ll> pi;
typedef pair<ld,ld> pct;
const ll inf = 1LL << 60;
const ll mod = 1e9 + 7;
const ld eps = 1e-9;
void add(ll &a , ll b)
{
a += b;
a %= mod;
}
void sub(ll &a, ll b)
{
a = (a - b + mod) % mod;
}
int n, m, pd[1100][1100],t,cate,k;
string a,b;
char sol[1100];
int main()
{
f >> t;
while(t--)
{
f >> k;
f >> a >> b;
a = ' ' + a;
b = ' ' + b;
for(int i = 1; i < a.size(); ++i)
for(int j = 1; j < b.size(); ++j)
if(a[i] == b[j])
pd[i][j] = pd[i-1][j-1] + 1;
else
pd[i][j] = max(pd[i-1][j], pd[i][j-1]);
int i = a.size() - 1;
int j = b.size() - 1;
cate = pd[i][j] - 1;
while(i > 0 || j > 0)
{
if(a[i] == b[j])
{
sol[cate--] = a[i];
i--;
j--;
}
else if(pd[i - 1][j] > pd[i][j - 1])
i--;
else j--;
}
sol[ pd[a.size() - 1][b.size() - 1] ] = NULL;
g << sol << '\n';
}
f.close();
g.close();
return 0;
}