Cod sursa(job #72286)

Utilizator a7893Nae Mihai a7893 Data 13 iulie 2007 12:14:39
Problema Secv Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.41 kb
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define N 10000
int n,v[N],c[N],s[N],k=1;
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=1;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];
	k--;
	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 iinc(int x)
{
	int i;
	for(i=1;i<=k;i++)
		if(x==c[i])
			c[i]=0;
}
int gasit(int v[N],int poz,int &nr)
{
	int i,j,ok=0;
	for(i=poz;v[i]!=c[k]&&i<=n;i++)
		iinc(v[i]);
	j=i;
	c[k]=0;
	ok=1;
	for(i=1;i<=k;i++)
		if(c[i])
			ok=0;
	if(ok)
	{
		nr=j-1;
		return 1;
	}
	return 0;
}
void solve()
{
	int poz,min=N,nr=0,aux[N];
	reconstruct();
	//afis(c,k);
	memcpy(aux,c,sizeof(c));
	for(poz=1;poz<=n;poz++)
	{
		memcpy(c,aux,sizeof(aux));
		if(v[poz]==c[1])
			if(gasit(v,poz,nr)&&nr<min)
				min=nr;
	}
	printf("%d\n",min);
}
int main()
{
	freopen("secv.in","r",stdin);
	freopen("secv.out","w",stdout);
	read();
	solve();
	return 0;
}