Cod sursa(job #586949)

Utilizator bacilaBacila Emilian bacila Data 3 mai 2011 16:07:49
Problema Seif Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.99 kb
#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;
}