Cod sursa(job #1927919)

Utilizator waren4Marius Radu waren4 Data 15 martie 2017 18:28:43
Problema Numarare triunghiuri Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.33 kb
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;

ifstream f("nrtri.in"); ofstream g("nrtri.out");
int n,a[10001],j,i,nr;

int cautbin(int x) {
    int st = 1,dr = n,mij,last = 0;
    while (st <= dr)
    {
        while(st == i  || st == j) ++st;
        while(dr == i  || dr == j) --dr;
        mij = (st + dr) / 2;
        if (a[mij] <= x){
            if (mij==i || mij == j) {
                while(mij == i || mij == j) ++mij;
                if  (a[mij] <= x) {
                    last = mij;
                    break;
                }
                else {
                    --mij;
                    dr=mij;
                }
            }
            else {
                if (a[i] + a[mij] > a[j] && a[j] + a[mij] > a[i]) {
                        last = mij;
                        break;
                }
                else st = mij + 1;
            }
        }
        if (a[mij] > x) {
            dr = mij - 1;
        }
    }
    return last;
}
int main() {
    f>>n;
    for(i = 1; i <= n; ++i) {
      f>>a[i];
    }
    sort(a+1,a+n+1);
    nr = 0;
    for(i = 1; i < n; ++i) {
        for (j = n; j > i ; --j) {
            if(cautbin(a[i] + a[j]) > 0) {
                ++nr;
            }
        }
    }
    g<<nr/2;
    return 0;
}