Cod sursa(job #359885)

Utilizator Anamaria20Cotirlea Anamaria Anamaria20 Data 28 octombrie 2009 18:01:20
Problema NextSeq Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.58 kb
#include <stdio.h>
#include <algorithm>

using namespace std;

FILE *f,*s;

int m,n,p,i,j,v1[1005],v2[1005],v3[1005],v4[5];

void suma(int x[10005], int y[1005])
{
    int T=0;
     
    if(y[0]>x[0])
    {
        for (i=x[0]+1; i<=y[0]; i++) x[i]=0;
		
        x[0]=y[0];
    }
    else   
        for (i=y[0]+1; i<=x[0]; i++) y[i]=0;
     
    for (i=y[0]+1; i<=x[0]; i++) y[i]=0;
     
    for (i=1;i<=x[0];i++)
    {
        x[i]+=y[i]+T;
        T=x[i]/m;
        x[i]%=m;
    }
     
    if (T)
    {
        x[0]++;
        x[x[0]]=T;
    }
}

int comparare(int H1[1005],int H2[1005]) 
{
  while (H1[0] && !H1[H1[0]]) H1[0]--;
  while (H2[0] && !H2[H2[0]]) H2[0]--;
 
  if (H1[0] < H2[0]) 
    return -1;
  
  if (H1[0] > H2[0]) 
    return +1;
	
  for (int i = H1[0]; i > 0; --i) 
  {
    if (H1[i] < H2[i]) 
      return -1;
    
	if (H1[i] > H2[i]) 
      return +1;
    
  }
  
  return 0;
}

int main()
{
	f=fopen("nextseq.in","r");
	s=fopen("nextseq.out","w");
	
	fscanf(f,"%d %d %d",&m,&n,&p);
	
	for(i=m;i>=1;i--)
		fscanf(f,"%d",&v1[i]);
	
	for(i=n;i>=1;i--)
		fscanf(f,"%d",&v2[i]);
	
	for(i=p;i>=1;i--)
		fscanf(f,"%d",&v3[i]);
	
	sort(v1+1,v1+m+1);
	
	for(i=1;i<=n;i++)
	{
		j=1;
		while(v2[i]!=v1[j])
			j++;
		
		v2[i]=j;
	}

	v2[0]=n;
	
	for(i=1;i<=p;i++)
	{
		j=1;
		while(v3[i]!=v1[j])
			j++;
		
		v3[i]=j;
	}	
	
	v3[0]=p;
	
	v4[0]=1;
	v4[1]=1;
	
	int rez=0;
	
	while(comparare(v2,v3)==-1)
	{	
		suma(v2,v4);
		
		rez++;
	}
	
	fprintf(s,"%d",rez-1);
	
	fclose(s);
	
	return 0;
}