Cod sursa(job #1762006)

Utilizator AbraCadabra_AbraCadabra AbraCadabra_ Data 23 septembrie 2016 10:49:46
Problema Cel mai lung subsir comun Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.85 kb
#include <stdio.h>
#include <stdlib.h>
#include <string>

#define max(a,b) ((a>b)?a:b)
int C[1024][1024];

int main(void)
{
	int n=0,m=0;
	int *A,*B,*D;
	FILE* f;
	f=fopen("cmlsc.in","r");
	if(f!=NULL){		
		fscanf_s(f,"%d",&n);
		fscanf_s(f,"%d",&m);
		A=(int*) malloc(n*sizeof(int));
		B=(int*) malloc(m*sizeof(int));	
		D=(int*) malloc(1024*sizeof(int));

		for(int i=0;i<n;++i){
			fscanf(f,"%d",&A[i]);
		}
		for(int i=0;i<m;++i){
			fscanf(f,"%d",&B[i]);
		}
		int o=0;
		for(int i=1;i<=n;++i){		
			for(int j=1;j<=m;++j){
				if(A[i-1]==B[j-1]){
					D[o++]=A[i-1];
					C[i][j]=C[i-1][j-1]+1;
				} else {
					C[i][j]=max(C[i][j-1],C[i-1][j]);
				}
			}
		}


		fclose(f);
		f=fopen("cmlsc.out","w");

		for(int i=0;i<o;++i){
			fprintf(f,"%d ",D[i]);		
		}
		fclose(f);
	} else {
		perror("");
	}

	return 0;
}