Cod sursa(job #1656065)

Utilizator Grigorescu_Nicolae_322CBGrigorescu Nicolae Grigorescu_Nicolae_322CB Data 18 martie 2016 18:03:17
Problema Cel mai lung subsir comun Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 0.87 kb
#include <stdio.h>

#define NMax 1024

int MAX(int a, int b){

 return (a>b)? a:b ;
}
 int R[NMax][NMax],A[NMax],B[NMax],i,j,N,M,l[NMax],cnt;

int main(){
    FILE *f1=fopen("cmlsc.in", "r");
    FILE *f2=fopen("cmlsc.out","w");

    fscanf(f1,"%d %d", &M,&N);
    for (i=1;i<=M;i++)
        fscanf(f1,"%d",&A[i]);
    for (j=1;j<=N;j++)
        fscanf(f1,"%d",&B[j]);

    for (i=0;i<MAX(M,N);i++)
        l[i]=-1;

    for (i=1;i<=M;i++)
        for(j=1;j<=N;j++)
            if (A[i]==B[j])
        {
            R[i][j]=1+R[i-1][j-1];
            l[cnt]=A[i];
            cnt++;
        }
        else{
            R[i][j]=MAX(R[i-1][j],R[i][j-1]);
        }
    fprintf(f2,"%d\n",R[M][N]);
    for (i=0;i<MAX(M,N);i++){
        if (l[i]!=-1) fprintf(f2,"%d ",l[i]);
        else break;
    }
    fclose(f1);
    fclose(f2);
    return 0;
}