Cod sursa(job #2166666)

Utilizator hrazvanHarsan Razvan hrazvan Data 13 martie 2018 18:14:55
Problema Medie Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.99 kb
#include <cstdio>
#include <algorithm>
#define MAXN 9000
#define MAXV 7000
int v[MAXN], fr[MAXV];

int main(){
  FILE *in = fopen("medie.in", "r");
  int n, i, j, k, a, b;
  fscanf(in, "%d", &n);
  for(i = 0; i < n; i++){
    fscanf(in, "%d", &v[i]);
    fr[v[i]]++;
  }
  fclose(in);
  long long rez = 0;
  std::sort(v, v + n);
  for(i = 0; i < n; i++){
    j = 0;  k = n - 1;
    while(v[j] < v[i] && v[k] > v[i]){
      while(v[j] < v[i] && v[j] + v[k] < 2 * v[i])
        j++;
      while(v[k] > v[i] && v[j] + v[k] > 2 * v[i])
        k--;
      if(v[j] + v[k] == 2 * v[i]){
        a = 0;
        while(v[j + a] == v[j])
          a++;
        b = 0;
        while(v[k - b] == v[k])
          b++;
        j += a;
        k -= b;
        rez += 1LL * a * b * fr[i];
      }
    }
  }
  for(i = 0; i <= MAXV; i++)
    rez += 1LL * fr[i] * (fr[i] - 1) * (fr[i] - 2) / 6;
  FILE *out = fopen("medie.out", "w");
  fprintf(out, "%d", rez);
  fclose(out);
  return 0;
}