Pagini recente » Cod sursa (job #1778343) | Cod sursa (job #1992062) | Cod sursa (job #1345683) | Cod sursa (job #3290088) | Cod sursa (job #2558048)
#include <fstream>
#include <algorithm>
using namespace std;
int t,n,m,k,i,j,ok,a,b,v1[1005],v2[1005],x[1005],y[1005],w1[300][1005],w2[300][1005],d[1005][1005];
char ch,ch1[1005],ch2[1005];
int main()
{
ifstream f("seif.in");
ofstream g("seif.out");
f>>t;
while(t)
{
t--;
f>>k;
n=0;
m=0;
for(i=1; i<=27; i++)
{
x[i]=1;
y[i]=1;
w1[i][0]=0;
w2[i][0]=0;
}
f>>ch1;
while(ch1[n])
{
n++;
v1[n]=ch1[n-1]-'A'+1;
w1[v1[n]][0]++;
w1[v1[n]][w1[v1[n]][0]]=n;
}
f>>ch2;
while(ch2[m])
{
m++;
v2[m]=ch2[m-1]-'A'+1;
w2[v2[m]][0]++;
w2[v2[m]][w2[v2[m]][0]]=m;
}
for(i=1; i<=27; 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]);
d[i][j]=max(d[i][j],d[i+1][j+1]+(v1[i]==v2[j]));
}
a=0;
b=0;
while(d[a+1][b+1])
{
ok=1;
i='Z'-'A'+1;
while(ok)
{
if(i==1)
{
i=1;
}
while(w1[i][x[i]]<=a) x[i]++;
while(w2[i][y[i]]<=b) y[i]++;
if(d[w1[i][x[i]]][w2[i][y[i]]]&&d[w1[i][x[i]]][w2[i][y[i]]]>=k)
{
ok=0;
k--;
ch=i+'A'-1;
g<<ch;
a=w1[i][x[i]];
b=w2[i][y[i]];
}
i--;
}
}
g<<'\n';
}
return 0;
}