Pagini recente » Cod sursa (job #2777273) | Cod sursa (job #630037) | Cod sursa (job #1182751) | Cod sursa (job #2409063) | Cod sursa (job #424103)
Cod sursa(job #424103)
#include <stdio.h>
#include <string.h>
#define IN "seif.in"
#define OUT "seif.out"
#define Lg 1010
#define N 27
int mat[Lg][Lg];
char s1[Lg], s2[Lg];
int Poz1[Lg][N] , Poz2[Lg][N];
int Lg1, Lg2 , K, T;
inline int max(int a,int b)
{
return a>b?a:b;
}
void Read()
{
scanf ("%d\n", &K);
fgets(s1, Lg, stdin);
fgets(s2, Lg, stdin);
Lg1 = strlen(s1)-2;
Lg2 = strlen(s2)-2;
}
void solve()
{
for (int i=Lg1; i>=0; i--)
for (int j=Lg2; j>=0; j--)
if (s1[i] == s2[j])
mat[i][j] = mat[i+1][j+1] + 1;
else
mat[i][j] = max(mat[i][j+1], mat[i+1][j]);
memset(Poz1, 0xff, sizeof(Poz1));
memset(Poz2, 0xff, sizeof(Poz2));
for (int i=Lg1; i>=0; i--)
for (char c='A'; c<='Z'; c++)
if (s1[i] == c)
Poz1[i][c - 'A'] = i;
else
Poz1[i][c - 'A'] = Poz1[i + 1][c - 'A'];
for (int i=Lg1; i>=0; i--)
for (char c='A'; c<='Z'; c++)
if (s2[i] == c)
Poz2[i][c - 'A'] = i;
else
Poz2[i][c - 'A'] = Poz2[i + 1][c - 'A'];
}
void afish()
{
int i=0,j=0,ok=1,c;
while (ok)
{
ok = 0;
for(c=25;c>=0 && !ok;--c)
if(Poz1[i][c] != -1 && Poz2[j][c] != -1 && mat[Poz1[i][c]][Poz2[j][c]] >= K)
{
printf("%c",c+'A');
ok = 1;
i = Poz1[i][c]+1;
j = Poz2[j][c]+1;
}
K--;
}
printf("\n");
}
int main ()
{
freopen (IN ,"r", stdin);
freopen (OUT ,"w",stdout);
scanf ("%d", &T);
while (T)
{
T--;
Read();
solve();
afish();
}
return 0;
}