Cod sursa(job #121162)

Utilizator lamez0rBogdan Bondor lamez0r Data 7 ianuarie 2008 22:05:15
Problema Medie Scor 0
Compilator c Status done
Runda Arhiva de probleme Marime 1.38 kb
#include<stdio.h>
int v[7001];

int pozitie (int s, int d)
    {
    int x=v[s];
    while (s<d)
	  {
	  while (s<d&&x<=v[d])
		--d;
	  v[s]=v[d];
	  while (s<d&&x>=v[s])
		++s;
	  v[d]=v[s];
	  }
    v[s]=x;
    return s;
    }

void quick (int s, int d)
     {
     int p;
     p=pozitie(s,d);
     if (s<p-1)
	quick(s,p-1);
     if (p+1<d)
	quick(p+1,d);
     }

int main ()
{
int nr=0,n,i,c,j;
FILE *f;
f=fopen("medie.in","r");
fscanf(f,"%d",&n);
for (i=1;i<=n;++i)
    fscanf(f,"%d",&v[i]);
fclose(f);
quick(1,n);

for (i=2;i<=n/2;++i)         //doar afla NUMARUL !
    for (j=1;j<i;++j)        //gaseste partea stanga
	{
	c=i+(n-i)/2;
	if ( (v[j]+v[c])*1.0/2.0==v[i]*1.0&&j!=c )
	     ++nr;
	else
	   if ( (v[j]+v[c])*1.0/2.0<v[i]*1.0 )
	      for (;c<=n;++c)
		  if ( 1.0*(v[j]+v[c])/2.0==v[i]*1.0 )
		     ++nr;
	   else
	      for (;c>i;--c)
		  if ( 1.0*(v[j]+v[c])/2.0==v[i]*1.0 )
		     ++nr;
	}

for (i=n/2+1;i<=n-1;++i)
    for (j=i;j<=n-1;++j)
	{
	c=(i-1)/2;
	if ( (v[j]+v[c])*1.0/2.0==v[i]*1.0 )
	   ++nr;
	else
	   if ( (v[j]+v[c])*1.0/2.0<v[i]*1.0 )
	      for (;c<i;++c)
		  if ( (v[j]+v[c])*1.0/2.0==1.0*v[i] )
		     ++nr;
	   else
	      for (;c>=1;--c)
		  if ( (v[j]+v[c])*1.0/2.0==1.0*v[i] )
		     ++nr;
	}

f=fopen("medie.out","w");
fprintf(f,"%d",nr);
fclose(f);
return 0;
}