Pagini recente » Cod sursa (job #119452) | Cod sursa (job #560779) | Cod sursa (job #609672) | Cod sursa (job #300644) | Cod sursa (job #457193)
Cod sursa(job #457193)
#include<stdio.h>
#include<algorithm>
using namespace std;
long n;
long v[801];
long cautbin1 (long x , long dr)
{
long st , m,aux;
st=1;
while (st<=dr)
{
m=(st+dr)/2;
if (v[m]<x)
dr=m-1;
else
{
st=m+1;
if (v[m]>=x)
aux=m;
}
}
return aux;
}
long cautbin2 (long x , long st)
{
long dr ,m , aux ;
dr=n;
while (st<=dr)
{
m=(st+dr)/2;
if (v[m]<=x)
st=m+1;
else
{
aux=m;
dr=m-1;
}
}
return aux;
}
int main()
{
long i,j,s1,s2,m1,m2,num=0,ok;
freopen("nrtri.in","r",stdin);
freopen("nrtri.out","w",stdout);
scanf("%ld",&n);
for (i=1;i<=n;i++)
scanf("%ld",&v[i]);
sort(v+1,v+n+1);
for (i=1;i<=n;i++)
for (j=i+1;j<=n;j++)
{
s1=v[i]+v[j];
s2=v[j]-v[i];
m1=cautbin1(s2,i);
ok=1;
m2=cautbin2(s1,j);
if (m1!=i && m1!=j && m1<=n && m1>=0 && v[m1]<=s2)
{
num++;
ok=0;
}
if (m2!=i && m2!=j && m2<=n && m2>=0 && v[m2]>=s1)
{
num++;
ok=0;
}
if (ok==0)
num=num+2;
}
printf("%ld\n",num/3);
return 0;
}