Cod sursa(job #1508039)
Utilizator | Donciu Mircea Mircea_Donciu | Data | 22 octombrie 2015 11:21:13 |
---|---|---|---|
Problema | Numarare triunghiuri | Scor | 0 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 0.85 kb |
#include <fstream>
#include<algorithm>
using namespace std;
int n,v[805],i,j,a,k,s,st,dr,m;
int main()
{
ifstream f("nrtri.in");
ofstream g("nrtri.out");
f>>n;
for(i=1; i<=n; i++)
f>>v[i];
sort(v+1,v+n+1);
for(i=1; i<n-1; i++)
for(j=i+1; j<n; j++)
{
a=min(v[n],v[i]+v[j]);
k=v[j]-v[i];
st=j;
dr=n;
while(st+1<dr)
{
m=(st+dr+1)/2;
if(v[m]>=a)
dr=m;
else st=m;
}
if(v[dr]>a)a=st;
else a=dr;
st=1;
dr=i;
while(st+1<dr)
{
m=(st+dr+1)/2;
if(v[m]>=k)
dr=m;
else st=m;
}
if(v[dr]>k)k=st;
else k=dr;
s+=a-k;
}
g<<s/3<<'\n';
f.close(); g.close();
}