Cod sursa(job #432977)

Utilizator AndrewTheGreatAndrei Alexandrescu AndrewTheGreat Data 3 aprilie 2010 01:10:41
Problema Medie Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.86 kb
#include <iostream>
#define s(x) (((x)*((x)-1)*((x)-2))>>1)
using namespace std;

struct vul
{
    int cat;
} numar[7010];

int v[9050],maxi;

int main()
{
    freopen ("medie.in","r",stdin);
    freopen ("medie.out","w",stdout);

    int n,x;
    cin>>n;
    int nnou=0;
    for(int i=1;i<=n;i++)
    {
        cin>>v[i+nnou];
        numar[v[i+nnou]].cat++;
        if(numar[v[i+nnou]].cat>1)
            nnou--;
    }

    for(int i=1;i<n+nnou;i++)
    {
        if(numar[v[i+nnou]].cat>2)
            maxi+=s(numar[v[i+nnou]].cat);
        for(int j=i+1;j<=n+nnou;j++)
        {
            x=v[i]+v[j];
            if(!(x&1))
            {
                x=x>>1;
                maxi+=numar[x].cat;
            }
        }
    }
    if(numar[v[n+nnou]].cat>2)
        maxi+=s(numar[v[n+nnou]].cat);
    cout<<maxi;

    return 0;
}