Pagini recente » Istoria paginii runda/sesiune_igorjeana/clasament | Cod sursa (job #2241907) | Cod sursa (job #1941863) | Cod sursa (job #2190032) | Cod sursa (job #991599)
Cod sursa(job #991599)
#include<fstream>
#include<cstring>
#define N 1010
#define S 30
using namespace std;
ifstream f("seif.in");
ofstream g("seif.out");
int t,k,n,m,i,j,l,pred[N][S],pred1[N][S],d[N][N];
char s1[N],s2[N];
int main()
{
f>>t;
for(;t;--t)
{
f>>k;
f>>(s1+1)>>(s2+1);
memset(d,0,sizeof(d));
memset(pred,0,sizeof(pred));
memset(pred1,0,sizeof(pred1));
n=strlen(s1+1);
m=strlen(s2+1);
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+1][j],d[i][j+1]);
for(i=n;i;--i)
{
for(j=0;j<=25;++j)
{
pred[i][j]=pred[i+1][j];
}
pred[i][s1[i]-'A']=i;
}
for(i=m;i;--i)
{
for(j=0;j<=25;++j)
{
pred1[i][j]=pred1[i+1][j];
}
pred1[i][s2[i]-'A']=i;
}
for(i=j=1;k>=0||(i<=n&&j<=m);--k)
{
for(l=25;l>=0;--l)
if(pred[i][l]&&pred1[j][l]&&d[pred[i][l]][pred1[j][l]]>=k)
{
g<<char(l+'A');
i=pred[i][l]+1;
j=pred1[j][l]+1;
break;
}
if(l==-1)
break;
}
g<<'\n';
}
return 0;
}