Cod sursa(job #72281)

Utilizator a7893Nae Mihai a7893 Data 13 iulie 2007 11:35:34
Problema Secv Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.08 kb
#include<stdio.h>
#include<stdlib.h>
#define N 5001
int n,v[N],c[N],s[N],k;
void read()
{
	int i;
	scanf("%d",&n);
	for(i=1;i<=n;i++)
		scanf("%d",&v[i]);
}
void afis(int v[N],int n)
{
	int i;
	for(i=1;i<=n;i++)
		printf("%d ",v[i]);
	printf("\n");
}
int exist(int x)
{
	int i;
	for(i=0;i<k;i++)
		if(c[i]==x)
			return 1;
	return 0;
}
int maxim(const void *a,const void *b)
{
	return *(int*)a-*(int*)b;
}
void reconstruct()
{
	int i;
	c[k++]=v[1];
	for(i=2;i<=n;i++)
		if(!exist(v[i]))
			c[k++]=v[i];
	qsort(c,k,sizeof(c[0]),maxim);
}
void init(int s[N])
{
	int i;
	for(i=1;i<=k;i++)
		s[i]=0;
}
int all()
{
	int i;
	for(i=1;i<=k;i++)
		if(s[i]==0)
			return 0;
	return 1;
}
void solve()
{
	int i,poz,min=N;
	reconstruct();
	//afis(c,k);
	for(poz=1;poz<=n;poz++)
		if(v[poz]==c[0])
		{
			init(s);
			for(i=poz;i<=n;i++)
			{
				s[v[i]]=1;
				if(all()&&i-poz+1<min)
					min=i-poz+1;
			}
		}
	printf("%d\n",min);
}
int main()
{
	freopen("secv.in","r",stdin);
	freopen("secv.out","w",stdout);
	read();
	solve();
	return 0;
}