Cod sursa(job #1122341)

Utilizator eustatiuDima Eustatiu eustatiu Data 25 februarie 2014 17:39:45
Problema Medie Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.17 kb
#include <stdio.h>
using namespace std;
struct pct
{
    long x,y;
};
long long cmb(long x)
{
    long long j,i;
    j=x-2;
    long long p=1;
    for (i=j;i<=x;i++)
        p*=i;
    p/=2;
    return p;
}
long n,i,max,a[9001],m,j,sm,d,v[9001],nr;
long long s;
pct b[9001];
int main()
{
    freopen ("medie.in","r",stdin);
    freopen ("medie.out","w",stdout);
    scanf ("%ld",&n);
    max=-500000;
    for (i=1;i<=n;i++)
    {
        scanf ("%ld",&a[i]);
        v[a[i]]++;
        if (a[i]>max)
            max=a[i];
    }
    for (i=1;i<=max;i++)
        if (v[i])
        {
            m++;
            b[m].x=i;
            b[m].y=v[i];
        }
    s=0;

    for (i=1;i<=m;i++)
    {
        for (j=1;j<=i;j++)
        {
            d=b[i].x-b[j].x;
            if (d==0)
            {
                if (b[i].y>2)
                s+=cmb(b[i].y);
            }
            else
            {
                sm=0;
                nr=b[i].x+d;
                if (v[nr]>0&&nr<=max)
                    sm=v[nr]*b[j].y*b[i].y;
                s+=sm;
            }
        }

    }
    printf ("%lld",s);

    return 0;
}