Cod sursa(job #973681)

Utilizator Impaler_009Mihai Nitu Impaler_009 Data 15 iulie 2013 01:59:11
Problema Numarare triunghiuri Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.78 kb
#include <fstream>
#include <algorithm>

using namespace std;

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

int v[801],S,n,t,i,j,diff;

//Pentru ca segmentele de lungimi a,b,c sa formeze un triunghi:  med(a,b,c) + min(a,b,c) >= max(a,b,c)

int bynary_search (int  lo, int hi, int x)
{
    while (hi-lo>1)
    {
        int mid = (lo+hi)/2;
        if (x<v[mid]) hi=mid;
        else lo=mid;
    }
    return lo;
}

int main()
{
    fin>>n;
    for (i=1; i<=n; i++) fin>>v[i];

    sort (v+1,v+n+1);

    for  (i=1; i<=n-1; i++)
    {
    diff=i+1;
    for (j=i+1; j<=n; j++)
    {
         S = S + (bynary_search (0,n+1,v[i]+v[j]) - diff);   //invariant left <= x < right pentru a gasi ultimul x din sir
         diff++;
    }
    }
     fout<<S;
}