Cod sursa(job #222977)

Utilizator lamez0rBogdan Bondor lamez0r Data 26 noiembrie 2008 15:45:55
Problema Secv Scor 20
Compilator c Status done
Runda Arhiva de probleme Marime 1.17 kb
#include<stdio.h>
int n,poz,min=6000;
long v[5001],sub[5001];

void read ()
	{
	FILE *f=fopen("secv.in","r");
	fscanf(f,"%d",&n);
	int i,j;
	for (i=1;i<=n;++i)
		{
		fscanf(f,"%ld",&v[i]);
		int ok=1;
		for (j=1;j<=i-1&&ok;++j)
			if (sub[j]==v[i])
				ok=0;
		if (ok)
			sub[++poz]=v[i];
		}
	fclose(f);
	}

void quicks (int s, int d)
	{
	int m=(s+d)/2,i=s,j=d,x;
	x=sub[m];
	while (i<=j)
		{
		while (sub[i]<x)
			i++;
		while (x<sub[j])
			--j;
		if (i<=j)
			{
			int aux=sub[i];
			sub[i]=sub[j];
			sub[j]=aux;
			i++;
			j--;
			}
		}
	if (s<j)
		quicks(s,j);
	if (i<d)
		quicks(i,d);
	}

void solve ()
	{
	int i,poz2;
	for (i=1;i<=n-poz+1;++i)
		{
		poz2=1;
		if (v[i]==sub[poz2])
			{
			int j,ok=0,lg;
			++poz2;
			lg=1;
			for (j=i+1;j<=n&&!ok;++j)
				{
				lg++;
				if (v[j]==sub[poz2])
					poz2++;
				if (poz2==poz)
					ok=1;
				}
			if (ok)
				if (lg<min)
					min=lg;
			}
		}
	}

void write ()
	{
	FILE *f=fopen("secv.out","w");
	if (min==6000)
		fprintf(f,"-1");
	else
		fprintf(f,"%d",min+1);
	fclose(f);
	}

int main ()
{
read ();
quicks(1,poz);
solve ();
write ();
return 0;
}