Pagini recente » Cod sursa (job #1302153) | Cod sursa (job #994189) | Cod sursa (job #582712) | Cod sursa (job #1060323) | Cod sursa (job #257969)
Cod sursa(job #257969)
#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 s1[MAXN],s2[MAXN],sol[MAXN],c;
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;
for(i=1;i<=n;i++)
d[m+1][i]=0;
for(i=1;i<=m;i++)
d[i][n+1]=0;
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;
}