Pagini recente » Cod sursa (job #56154) | Cod sursa (job #2150430) | Cod sursa (job #2769355) | Cod sursa (job #2576663) | Cod sursa (job #586949)
Cod sursa(job #586949)
#include <fstream>
using namespace std;
inline int maxi(int a, int b)
{if(a>b) return a;
return b;}
int tl,a[1005][1005],n,m,i,j,l,p,ll,pp,k,T,x;
char rez[1005],s1[1005],s2[1005],st[1005];
int main ()
{ifstream f("seif.in");
ofstream g("seif.out");
f>>T;
for(x=1;x<=T;x++)
{f>>tl>>s1>>s2;
n=strlen(s1);
m=strlen(s2);
for(i=1;i<=n;i++)
a[i][m+1]=0;
for(i=1;i<=m;i++)
a[n+1][i]=0;
for(i=n;i;i--)
for(j=m;j;j--)
if(s1[i-1]==s2[j-1])
a[i][j]=a[i+1][j+1]+1;
else
a[i][j]=maxi(a[i+1][j],a[i][j+1]);
ll=1; pp=1;
for(k=1;k<=tl;k++)
{l=ll; p=pp;
for(i=l;i<=n-(tl-k);i++)
for(j=p;j<=m-(tl-k);j++)
if((a[i][j]>=(tl-k+1)&&a[i][j]<=(a[1][1]-k+1))&&s1[i-1]==s2[j-1]&&s1[i-1]>rez[k])
{rez[k]=s1[i-1]; ll=i+1; pp=j+1;}
}k--;
do{k++;
l=ll; p=pp;
for(i=l;i<=n;i++)
for(j=p;j<=m;j++)
if(s1[i-1]==s2[j-1]&&s1[i-1]>rez[k])
{rez[k]=s1[i-1]; ll=i+1; pp=j+1; }
}while(rez[k]);
g<<(rez+1)<<'\n';
for(i=1;rez[i];i++)
rez[i]=0;}
f.close();
g.close();
return 0;
}