Cod sursa(job #2035327)

Utilizator eliaNaum Elia elia Data 9 octombrie 2017 10:48:44
Problema Numarare triunghiuri Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.87 kb
#include <iostream>
#include <fstream>
#include <algorithm>

using namespace std;

ifstream fin("nrtri.in");
ofstream fout("nrtri.out");

const int MAXN = 800;
int v[MAXN + 1];

int CautareBinara(int p1, int p2, int n)
{
    int st = p2 + 1, dr = n, m, sol = -1;
    int x = v[p1] + v[p2];
    while(st <= dr)
    {
        m  =(st + dr) / 2;
        if(v[m] > x)
            dr = m-1;
        else
        if(v[m] <= x)
        {
            sol = m;
            st = m + 1;
        }
    }
    return sol;
}

int main()
{
    int n, cnt=0, x;
    fin >> n;
    for(int i = 1; i <=  n; i++)
        fin >>  v[i];
    sort(v+1,v+n+1);
    for(int i=1; i<=n-2; i++)
        for(int j=i+1; j<=n-1; j++)
        {
            x=CautareBinara(i, j, n);
            if(x!=-1)
                cnt+=x-j;
        }
    fout << cnt;
    return 0;
}