Cod sursa(job #2035325)

Utilizator muresanvladMuresan Vlad muresanvlad Data 9 octombrie 2017 10:48:03
Problema Numarare triunghiuri Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.91 kb
#include <fstream>
#include <algorithm>

std::ifstream fin("nrtri.in");
std::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];
    std::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;

    fin.close();
    fout.close();
    return 0;
}