Cod sursa(job #59659)

Utilizator me_andyAvramescu Andrei me_andy Data 9 mai 2007 23:11:19
Problema Secv Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.35 kb
#include<fstream.h>
#include<math.h>
#include<stdlib.h>
  ifstream f("secv.in");
  ofstream g("secv.out");
  long *a=new long[5001];
  long *v=new long[5001];
  long *cont=new long[5001];
  long *a2=new long[5001];
  long *v1=new long[5001];
  long n,i,j,p,l,k,c,contor,contor2,ok,aux,dif,ok2,q;
void calc()
{
 for(i=1;i<=n;i++)
	for(j=i+1;j<n;j++)
	if(a[i]>a[j])
	{
	 aux=a[i];
	 a[i]=a[j];
	 a[j]=aux;
	 aux=cont[i];
	 cont[i]=cont[j];
	 cont[j]=aux;
	}
 i=1;
 while(a[i]==a[i+1])
 {
 contor++;
 i++;
 }
 j=n;
 while(a[j]==a[j-1])
 {
  contor2++;
  j--;
 }
 contor++;
  contor2++;
  dif=n;
 for(i=1;i<=contor;i++)
 {
  for(j=n;j>=n-contor2;j--)
  {
	if(abs(cont[i]-cont[j])<dif)
	{
	 ok=0;
	 for(l=cont[i];l<=cont[j];l++)
	 {
	  for(p=1;p<=c;p++)
	  if(v[p]==a2[l] && v1[p]==0)
	  {
		ok2=0;
		for(q=1;q<=p;q++)
		 if(v1[q]==0)
		 {
		  ok2=1;
		  break;
		  }
		  if(ok2==1)
		  {
		ok++;
		v1[p]=1;}
	  }
	 }
	 if(ok==c)
	  dif=abs(cont[i]-cont[j]);
	 for(p=1;p<=c;p++)
	  v1[p]=0;
	}
  }
 }
 g<<dif;
 exit(0);
}
int main()
{
 f>>n;
 c=1;
 for(i=1;i<=n;i++)
 {
  f>>a[i];
  a2[i]=a[i];
  ok=0;
  for(j=1;j<=c;j++)
  if(v[j]==a[i])
  {
	ok=1;
	break;
  }
  if(ok==0)
  {
  v[c]=a[i];
  c++;
  }
  cont[i]=i;
 }
  calc();
  g<<-1;
 f.close();
 g.close();
 return 0;
}