Pagini recente » Cod sursa (job #2089834) | Rating Parau Vlad (vladparau) | Cod sursa (job #2208548) | Cod sursa (job #1887235) | Cod sursa (job #331442)
Cod sursa(job #331442)
#include <cstdio>
#include <cstring>
#define file_in "seif.in"
#define file_out "seif.out"
#define Nmax 1111
int n,m;
int i,j;
int d[Nmax][Nmax];
int p1[Nmax][Nmax];
int p2[Nmax][Nmax];
char a[Nmax];
char b[Nmax];
int bst,sir[Nmax];
int T,K,c;
inline int max(int a, int b) { return a>b?a:b; }
int main()
{
freopen(file_in,"r",stdin);
freopen(file_out,"w",stdout);
scanf("%d\n", &T);
while(T--)
{
scanf("%d\n", &K);
scanf("%s\n",a+1);
n=strlen(a+1);
scanf("%s\n", b+1);
m=strlen(b+1);
//solve
memset(d,0,sizeof(d));
for (i=1;i<=n;++i)
for (j=1;j<=m;++j)
if (a[i]==b[j])
d[i][j]=d[i-1][j-1]+1;
else
d[i][j]=max(d[i-1][j],d[i][j-1]);
memset(p1,-1,sizeof(p1));
memset(p2,-1,sizeof(p2));
for (i=n;i>=1;--i)
for (j=0;j<26;++j)
if (a[i]==j+'A')
p1[i][j]=i+1;
else
p1[i][j]=p1[i-1][j];
for (i=m;i>=1;--i)
for (j=0;j<26;++j)
if (b[i]==j+'A')
p2[i][j]=i+1;
else
p2[i][j]=p2[i-1][j];
for (i=1,j=1;i<=n && j<=m;)
{
for (c=25;c>=0;--c)
{
if (p1[i][c]==-1 || p2[j][c]==-1)
continue;
if (d[p1[i][c]][p2[j][c]]<K)
continue;
printf("%c", c+'A');
i=p1[i][c]+1;
j=p2[j][c]+1;
--K;
break;
}
if (c==-1) break;
}
printf("\n");
}
fclose(stdin);
fclose(stdout);
return 0;
}