Cod sursa(job #138528)

Utilizator mariussMarius Telespan mariuss Data 18 februarie 2008 19:42:58
Problema Seif Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.18 kb
#include<stdio.h>
#include<string.h>
#define nmax 1000
int t,q,i,j,pp1,pp2,k,v[nmax][nmax],l1,l2;
char a[nmax],b[nmax];
inline int max(int p,int q)
{
    if(p>q)
        return p;
    else
        return q;

}

int main()
{
	freopen("seif.in","r",stdin);
    freopen("seif.out","w",stdout);
    
    scanf("%d",&t);
    
    for(;t>0;t--)
    {
        scanf("%d\n",&k);
        
        scanf("%s\n",&a);
        scanf("%s\n",&b);
    
        l1=strlen(a);
        l2=strlen(b);
    
        for(i=l1-1;i>=0;i--)
            for(j=l2-1;j>=0;j--)
            {
                if(a[i]==b[j])
                    v[i][j]=v[i+1][j+1]+1;
                else
                    v[i][j]=max(v[i+1][j],v[i][j+1]);
            }
    
        pp1=0;
        pp2=0;
		while(k>0)
		{
		for(i='Z';i>='A'&&k>0;)
		{
			for(j=pp1;j<l1;j++) if(int (a[j])==i) break;
			for(q=pp2;q<l2;q++) if(int (b[q])==i) break;

			if(j==l1||q==l2) i--;

			if(v[j][q]>=k)
			{
				printf("%c",i);
				k=v[j][q]-1;
				i--;
				pp1=j+1;
				pp2=q+1;
			}
			else i--;
		}
        }
    
        printf("\n");                
    }
    return 0;
    
}