Cod sursa(job #1205891)

Utilizator nicolaegutaNicolae Guta nicolaeguta Data 8 iulie 2014 13:22:28
Problema Medie Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.74 kb
#include <cstdio>
#include <algorithm>
#define Vmax 7005

using namespace std;

int fr[Vmax],left[Vmax];

int main()
{
    int N,x,valmax=0,i,j,ultpoz=0;
    long long sol=0,nr;
    freopen ("medie.in","r",stdin);
    freopen ("medie.out","w",stdout);
    scanf("%d", &N);
    for(i=1;i<=N;++i)
    {
        scanf("%d", &x);
        ++fr[x]; valmax=max(valmax,x);
    }
    for(i=1;i<=valmax;++i)
    {
        left[i]=ultpoz;
        if(fr[i])
            ultpoz=i;
    }
    for(i=1;i<=valmax;++i)
    {
        nr=(fr[i]-1)*(fr[i]-2)/2;
        for(j=i-1;j>0;j=left[j])
            if(2*i-j<=valmax)
                nr+=fr[j]*fr[2*i-j];
        sol+=1LL*fr[i]*nr;
    }
    printf("%lld\n", sol);
    return 0;
}