Cod sursa(job #1150899)

Utilizator TibixbAndrei Tiberiu Tibixb Data 23 martie 2014 17:53:11
Problema Numarare triunghiuri Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.19 kb
#include<fstream>
#include<algorithm>
using namespace std;
int x[803], i, j, n, p, p1, u, u1, ok, mij, sol, s, d;
int mod(int x){
    return (x>0?x:-x);
}
ifstream in("nrtri.in");
ofstream out("nrtri.out");
int main(){
    in>>n;
    for(i=1; i<=n; i++)
        in>>x[i];
    sort(x+1, x+n+1);
    for(i=1; i<n; i++){
        for(j=i+1; j<=n; j++){
            ok=0;
            s=x[i]+x[j];
            d=mod(x[i]-x[j]);
            p=i; u=n;
            while(p<=u){
                mij=p+(u-p)/2;
                if(x[mij]<s)
                    p=mij+1;
                else
                    u=mij-1;
            }
            u1=u;
            if(x[u1]>d)
                ok=1;
            p=i; u=n;
            while(p<=u){
                mij=p+(u-p)/2;
                if(x[mij]<s && x[mij]>d)
                    u=mij-1;
                else
                    p=mij+1;
            }
            p1=p;
            if(u1-p1+1>0 && ok!=0 && p1<u1){
                sol+=u1-p1+1;
                if(i>=p1 && i<=u1)
                    sol--;
                if(j>=p1 && j<=u1)
                    sol--;
            }
        }
    }
    out<<sol;
return 0;
}