Cod sursa(job #64935)

Utilizator coderninuHasna Robert coderninu Data 6 iunie 2007 13:47:47
Problema Medie Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.9 kb
#include <stdio.h>
#define infile "medie.in"
#define outfile "medie.out"
#define cmax 7001
#define infinit 9999

int v[cmax], i, j, n, min=infinit, max;
long rez;

void readdata()
{
 FILE *fin=fopen(infile, "r");
 fscanf(fin, "%d\n", &n);
 for (i=0; i<n; i++)
     {
      fscanf(fin, "%d\n", &j);
      v[j]++;
      if (j>max) max=j;
      if (j<min) min=j;
     }
 fclose(fin);
}

int comb(int a)
{
 if (a<2) return 0;
 return (a*(a-1))/2;
}

int minim(int a)
{
 int b=a-min,c=max-a;
 return b<c?b:c;
}

void solve()
{
 int aux;
 for (i=min; i<=max; i++)
     {
      rez+=v[i]*comb(v[i]-1);
      aux=minim(i);
      if (v[i])
	  for(j=1; j<=aux; j++)
	      rez+=v[i]*v[i+j]*v[i-j];
     }
}

void writedata()
{
 FILE *fout=fopen(outfile, "w");
 fprintf(fout, "%ld", rez);
 fclose(fout);
}

int main()
{
 readdata();
 solve();
 writedata();
 return 0;
}