Cod sursa(job #76208)

Utilizator MarcvsHdrMihai Leonte MarcvsHdr Data 8 august 2007 21:14:53
Problema NextSeq Scor 75
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.22 kb
# include <stdio.h>

const long int MAXN=1000;
const long int MAXM=10000;
long int x[MAXN+1],place[MAXM+10],a[MAXN+1],b[MAXN+1],n,m,p;

void citire()
{
FILE *f=fopen("nextseq.in","r");
fscanf(f,"%ld%ld%ld",&n,&m,&p);
long int i;
for (i=1;i<=n;i++) fscanf(f,"%ld",&x[i]);
for (i=1;i<=m;i++) fscanf(f,"%ld",&a[m-i+1]);
for (i=1;i<=p;i++) fscanf(f,"%ld",&b[p-i+1]);
fclose(f);
}

void quick(long int li, long int lf)
{
long int i=li,j=lf,ii=0,jj=-1,aux;
while (i<j)
	{
	if (x[i]>x[j])
		{
		aux=x[i];x[i]=x[j];x[j]=aux;
		aux=ii;ii=-jj;jj=-aux;
		}
	i+=ii;j+=jj;
	}
if (i-li>1) quick(li,i-1);
if (lf-i>1) quick(i+1,lf);
}

void scrie(long int sol)
{
FILE *g=fopen("nextseq.out","w");
fprintf(g,"%ld\n",sol);
fcloseall();
}

int mai_mic()
{
long int i=p;
while (i)
	{
	if (b[i]>a[i]) return 1;
	i--;
	}
return 0;
}

int main()
{
citire();
quick(1,n);
long int i,skip=0;
for (i=1;i<=n;i++)
	if (i>1&&x[i-1]==x[i]) skip++;
	else place[x[i]]=i-skip;
n-=skip;
for (i=1;i<=m;i++) a[i]=place[a[i]];
for (i=1;i<=p;i++) b[i]=place[b[i]];
long int sol=0;
while (mai_mic())
	{
	a[1]++;
	i=1;
	while (a[i]>n)
		{
		a[i+1]+=a[i]/n;
		a[i]%=n;
		i++;
		}
	sol++;
	}
scrie(sol-1);
return 0;
}