Pagini recente » Cod sursa (job #3180338) | Cod sursa (job #2769420) | Cod sursa (job #2723002) | Cod sursa (job #2577691) | Cod sursa (job #2720859)
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
int dp[1005][1005];
int nxt[2][1005][30];
char s[2][1005];
int main()
{ freopen("seif.in", "r", stdin);
freopen("seif.out", "w", stdout);
int t,k,n,m,i,j,l,i1,i2;
scanf("%d", &t);
while(t){
scanf("%d\n", &k);
scanf("%s", s[0]+1);
scanf("%s", s[1]+1);
n=strlen(s[0]+1);
m=strlen(s[1]+1);
for(i=n; i>=1; i--)
for(j=m; j>=1; j--)
if(s[0][i]==s[1][j])
dp[i][j]=dp[i+1][j+1]+1;
else
dp[i][j]=max(dp[i+1][j], dp[i][j+1]);
for(i=n-1; i>=0; i--){
for(j=1; j<=26; j++)
nxt[0][i][j]=nxt[0][i+1][j];
nxt[0][i][s[0][i+1]-'A'+1]=i+1;
}
for(i=m-1; i>=0; i--){
for(j=1; j<=26; j++)
nxt[1][i][j]=nxt[1][i+1][j];
nxt[1][i][s[1][i+1]-'A'+1]=i+1;
}
l=1;
i1=0;
i2=0;
while(l<=k){
for(j=26; j>=1; j--)
if(nxt[0][i1][j]!=0 && nxt[1][i2][j]!=0 && dp[nxt[0][i1][j]][nxt[1][i2][j]]>=k-l+1){
i1=nxt[0][i1][j];
i2=nxt[1][i2][j];
printf("%c", j+'A'-1);
break;
}
l++;
}
do{
for(j=26; j>=1; j--)
if(nxt[0][i1][j]!=0 && nxt[1][i2][j]!=0){
i1=nxt[0][i1][j];
i2=nxt[1][i2][j];
printf("%c", j+'A'-1);
break;
}
}while(j!=0);
printf("\n");
for(i=1; i<=n; i++)
for(j=1; j<=m; j++)
dp[i][j]=0;
for(i=1; i<=n; i++)
for(j=1; j<=26; j++)
nxt[0][i][j]=0;
for(i=1; i<=m; i++)
for(j=1; j<=26; j++)
nxt[1][i][j]=0;
t--;
}
return 0;
}