Pagini recente » Cod sursa (job #316153) | Cod sursa (job #1131782) | Cod sursa (job #1931522) | Cod sursa (job #720739) | Cod sursa (job #2557996)
#include <fstream>
#include <algorithm>
using namespace std;
int t,n,m,k,r,maxi,i,j,x,y,a,b,ok,x1[2005],x2[2005],ap[300],v1[2005],v2[2005],w1[2005][1005],w2[2005][1005],d[1005][1005];
char ch1[1005],ch2[1005],ch[2005],rs[2005];
int main()
{
ifstream f("seif.in");
ofstream g("seif.out");
f>>t;
while(t)
{
t--;
f>>k;
n=0;
m=0;
r=0;
f>>ch1;
while(ch1[n])
{
r++;
ch[r]=ch1[n];
n++;
}
f>>ch2;
while(ch2[m])
{
r++;
ch[r]=ch2[m];
m++;
}
sort(ch+1, ch+r+1);
maxi=0;
for(i=1; i<=r; i++)
{
if(ch[i]!=ch[i-1])
{
maxi++;
ap[ch[i]]=maxi;
rs[maxi]=ch[i];
}
}
for(i=1; i<=n; i++)
{
x=ap[ch1[i-1]];
v1[i]=x;
w1[x][0]++;
w1[x][w1[x][0]]=i;
}
for(i=1; i<=m; i++)
{
x=ap[ch2[i-1]];
v2[i]=x;
w2[x][0]++;
w2[x][w2[x][0]]=i;
}
for(i=1; i<=maxi; i++)
{
w1[i][0]++;
w1[i][w1[i][0]]=n+1;
w2[i][0]++;
w2[i][w2[i][0]]=m+1;
}
for(i=n; i>=1; i--)
for(j=m; j>=1; j--)
{
d[i][j]=max(d[i+1][j],d[i][j+1]);
if(v1[i]==v2[j]) d[i][j]=max(d[i][j],d[i+1][j+1]+1);
}
a=0;
b=0;
while(d[a+1][b+1])
{
ok=1;
i=maxi;
while(ok)
{
while(x1[i]==0||w1[i][x1[i]]<=a) x1[i]++;
while(x2[i]==0||w2[i][x2[i]]<=b) x2[i]++;
if(d[w1[i][x1[i]]][w2[i][x2[i]]]&&d[w1[i][x1[i]]][w2[i][x2[i]]]>=k)
{
ok=0;
a=w1[i][x1[i]];
b=w2[i][x2[i]];
k--;
g<<rs[v1[a]];
}
i--;
}
}
for(i=0; i<=maxi; i++)
{
for(j=1; j<=w1[i][0]; j++) w1[i][j]=0;
for(j=1; j<=w2[i][0]; j++) w2[i][j]=0;
w1[i][0]=0;
w2[i][0]=0;
x1[i]=0;
x2[i]=0;
}
for(i=1; i<=max(n,m); i++)
{
v1[i]=0;
v2[i]=0;
}
g<<'\n';
}
return 0;
}