Cod sursa(job #2342307)

Utilizator Teodor112Teodor Teodor112 Data 12 februarie 2019 18:53:47
Problema Medie Scor 30
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.13 kb
#include <bits/stdc++.h>
#define NMAX 9001
using namespace std;
ifstream fin("medie.in");
ofstream fout("medie.out");
int v[NMAX],n;
int check(int x, int poz1, int poz2);
int main()
{
    int i,j,Nr=0,x,medie,poz1,poz2;
    fin>>n;
    for(i=1;i<=n;++i)
    {
        fin>>v[i];
    }
    sort(v+1,v+n+1);

    v[0]=-1;
   /* for(i=1;i<=n;++i)
        cout<<v[i]<<" ";
    cout<<"\n";
    */
    for(i=1;i<=n;++i)
    {
        medie=2*v[i];
        poz1=i;
        for(j=1;j<=n;++j)
            if(j!=i)
        {
            poz2=j;
            x=medie-v[j];
            if(x>=0) Nr+=check(x,poz1,poz2);
        }
    }
    fout<<Nr/2<<"\n";

    return 0;
}
int check(int x, int poz1, int poz2)
{
    int dr,st,Nr=0,mij;
    //cout<<x<<" "<<poz1<< " "<<poz2<<"\n";
    st=0;
    dr=n+1;
    while(dr-st>1)
    {
        mij=(st+dr)/2;
        if(v[mij]>=x) dr=mij;
        else st=mij;
    }
   // cout<<dr<<" "<<v[dr]<<"\n";
    if(v[dr]==x) {
    if(dr!=poz1 && dr!=poz2)Nr=1;
    dr++;
    while(v[dr]==x) {if(dr!=poz1 && dr!=poz2) Nr++; dr++;}
    }
   // cout<<Nr<<"\n ";
    return Nr;
}