Pagini recente » Cod sursa (job #3030137) | Cod sursa (job #860742) | Cod sursa (job #2519980) | Cod sursa (job #1402816) | Cod sursa (job #257978)
Cod sursa(job #257978)
#include<stdio.h>
#include<string.h>
#define max(a, b) ((a > b) ? a : b)
#define MAXN 1014
int i,j,n,m,t,k,l,ok;
char c;
char s1[MAXN],s2[MAXN],sol[MAXN];
int d[MAXN][MAXN],a[27][MAXN],b[27][MAXN];
int main(void)
{
freopen("seif.in","r",stdin);
freopen("seif.out","w",stdout);
scanf("%d",&t);
while(t--)
{
scanf("%d",&k);
scanf("%s",s1+1);
scanf("%s",s2+1);
s1[0]=' ';
s2[0]=' ';
n=strlen(s1)-1;
m=strlen(s2)-1;
memset(d,0,sizeof(d));
for(i=n;i;i--)
for(j=m;j;j--)
if(s1[i]==s2[j])
d[i][j]=d[i+1][j+1]+1;
else
d[i][j]=max(d[i][j+1],d[i+1][j]);
memset(a,-1,sizeof(a));
memset(b,-1,sizeof(b));
for(c=0;c<26;c++)
for(i=n;i>=1;i--)
if(s1[i]==c+'A')
a[c][i]=i;
else
a[c][i]=a[c][i+1];
for(c=0;c<26;c++)
for(i=m;i>=1;i--)
if(s2[i]==c+'A')
b[c][i]=i;
else
b[c][i]=b[c][i+1];
ok=1;
i=1;j=1,l=0;
while(ok)
{
ok=0;
for(c=25;c>=0;c--)
if(a[c][i]!=-1 && b[c][j]!=-1 && d[a[c][i]][b[c][j]] >= k)
{
i=a[c][i]+1;
j=b[c][j]+1;
printf("%c", c+'A');
k--;
ok=1;
break;
}
}
printf("\n");
}
return 0;
}