Cod sursa(job #2294391)

Utilizator NeganAlex Mihalcea Negan Data 2 decembrie 2018 12:53:15
Problema Numarare triunghiuri Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.29 kb

#include <fstream>
#include <algorithm>
using namespace std;
ifstream fin("nrtri.in");
ofstream fout("nrtri.out");

int a[810];
int main()
{
    int n, i, j, gasit = 0, cnt = 0, stg, dr, mid;
    fin >> n;
    for(i = 1;i <= n;i++)
        fin >> a[i];
    sort(a + 1, a + n + 1);
    for(i = 1;i < n - 1;i++)
        for(j = i + 1;j < n;j++)
        {
            gasit = 0;
            stg = j + 1;
            dr = n;
            int poz=0;
            while(stg <= dr)
            {
                mid = stg + (dr - stg) / 2;
                if(a[j] + a[i] < a[mid])
                    dr = mid - 1;
                else if(a[j] + a[i] > a[mid])
                    stg = mid + 1;
                else if(a[j] + a[i] == a[mid] && a[mid]!=a[mid+1])
                {
                    gasit = 1;
                    poz=mid;
                    break;
                }
                else if(a[j] + a[i] == a[mid] && a[mid]==a[mid+1])
                {
                    stg= mid+1;
                }
            }
                if(gasit==1) cnt+= poz-j;
                else
                {
                    if(a[stg]<a[i]+a[j]) cnt+= stg-j;
                    else cnt+= stg-1-j;
                }
            }
    fout << cnt;

    return 0;
}