Cod sursa(job #2105489)

Utilizator mihaistamatescuMihai Stamatescu mihaistamatescu Data 13 ianuarie 2018 14:20:57
Problema Numarare triunghiuri Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.86 kb
#include <fstream>
#include <algorithm>
using namespace std;
ifstream fin ("nrtri.in");
ofstream fout ("nrtri.out");
int n,i,v[810],j,s,st,mid,dr,sol;
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++)
        for (j=i+1;j<=n-1;j++) {
            s = v[i] + v[j];
            /// consider ca s este suma laturilor mici ale triunghiului
            /// unde caut a treia latura ?
            /// R: intre j+1 si n caut ultima pozitie k cu v[k] < s
            /// si inseamna ca toate de la j+1 la k sunt de adunat (k-j)
            st=j+1;
            dr=n;
            while (st<=dr){
                mid=(st+dr)/2;
                if (v[mid]<s)
                    dr=mid;
                else
                    st=mid;
            }
            sol+=st-j;
        }
    fout<<sol;
}