Cod sursa(job #412836)

Utilizator petreanuandiPetreanu Adelin Andrei petreanuandi Data 6 martie 2010 15:09:07
Problema Cel mai lung subsir comun Scor 0
Compilator c Status done
Runda Arhiva educationala Marime 1.13 kb
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

void read(int *n,int **a,int *m,int **b)
{
	FILE *f=fopen("cmscd.in","r");
	int i;
	fscanf(f,"%d %d",n,m);
	
	*a=(int*) malloc((*n)*sizeof(int));
	for(i=0;i<(*n);i++)
			fscanf(f,"%i",&(*a)[i]);
	
	*b=(int*)malloc((*m)*sizeof(int));
	for(i=0;i<(*m);i++)
			fscanf(f,"%i",&(*b)[i]);
	fclose(f);
	}	
		
int elcomune(int *a,int*b,int n,int m)
{
		int mat[256][256];
		int i,j;
		for(i=0;i<n;i++)
			for(j=0;j<m;j++)
				mat[i][i]=0;

		int el=0;
		for(i=0;i<n;i++)
			for(j=0;j<m;j++)
					if(i==0 || j==0)
						{if(a[i]==b[j]) mat[i][j]=1; }
					else
						{if(a[i]==b[j]) mat[i][j]=mat[i-1][j-1]+1;
						}
		int v[256];
		int k=0;		el=0;
		for(i=0;i<n;i++)
		{
					for(j=0;j<m;j++)
					if(mat[i][j]==1)
					{	v[k++]=a[i];
						printf("%d",a[i]);
						el++;}
		}
		FILE *g=fopen("cmscd.out","w");
		fprintf(g,"%d \n",el);
		for(i=0;i<el;i++)		
					fprintf(g,"%d ",v[i]);
		fclose(g);			
		return el;
		
}


int main()
{
		int n,m;
		int *a,*b;

		int el;
		read(&n,&a,&m,&b);
		printf("%d %d",n,m);
		el=elcomune(a,b,n,m);
		printf("nr de elemente comune este %d ",el);
		return 0;
	}