Pagini recente » Cod sursa (job #2649520) | Cod sursa (job #2858708) | Cod sursa (job #1546142) | Cod sursa (job #772094) | Cod sursa (job #1744233)
#include <fstream>
#include <string>
using namespace std;
ifstream fin("seif.in");
ofstream fout("seif.out");
const int nmax= 1000;
const int sigma= 26;
int d[nmax+2][nmax+2], p1[nmax+2][sigma], p2[nmax+2][sigma];
int main( ) {
int t;
fin>>t;
for ( int cnt= 1; cnt<=t; ++cnt ) {
int k;
string a, b;
fin>>k>>a>>b;
for ( int i= 0; i<=(int)a.size()+1; ++i ) {
for ( int j= 0; j<=(int)b.size()+1; ++j ) {
d[i][j]= 0;
}
}
for ( int i= 0; i<=(int)a.size()+1; ++i ) {
for ( int j= 0; j<sigma; ++j ) {
p1[i][j]= 0;
}
}
for ( int i= 0; i<=(int)b.size()+1; ++i ) {
for ( int j= 0; j<sigma; ++j ) {
p2[i][j]= 0;
}
}
for ( int i= (int)a.size(); i>=1; --i ) {
for ( int j= (int)b.size(); j>=1; --j ) {
if ( a[i-1]==b[j-1] ) {
d[i][j]= d[i+1][j+1]+1;
} else {
d[i][j]= max(d[i+1][j], d[i][j+1]);
}
}
}
for ( int i= (int)a.size(); i>=1; --i ) {
for ( int j= 0; j<sigma; ++j ) {
p1[i][j]= p1[i+1][j];
}
p1[i][a[i-1]-'A']= i;
}
for ( int i= (int)b.size(); i>=1; --i ) {
for ( int j= 0; j<sigma; ++j ) {
p2[i][j]= p2[i+1][j];
}
p2[i][b[i-1]-'A']= i;
}
for ( int i= 1, j= 1, ok= 1; ok==1 && ((i<=(int)a.size() && j<=(int)b.size()) || k>=0); --k ) {
ok= 0;
for ( int o= sigma-1; o>=0 && ok==0; --o ) {
if ( d[p1[i][o]][p2[j][o]]>=k && p1[i][o]>0 && p2[j][o]>0 ) {
i= p1[i][o]+1, j= p2[j][o]+1;
ok= 1;
fout<<(char('A'+o));
}
}
}
fout<<"\n";
}
return 0;
}