Cod sursa(job #235590)
Utilizator | Data | 24 decembrie 2008 16:07:59 | |
---|---|---|---|
Problema | Numarare triunghiuri | Scor | 0 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 1.02 kb |
#include<cstdio>
#include<algorithm>
using namespace std;
int v[801],i,j,n,k,st,dr,mid;
int main()
{ freopen("nrtri.in","r",stdin);
freopen("nrtri.out","w",stdout);
scanf("%d",&n);
for(i=1;i<=n;i++)
scanf("%d",&v[i]);
sort(v+1,v+n+1);
for(i=1;i<=n-2;i++)
for(j=i+1;j<=n-1;j++)
{ st=j+1;dr=n;
while(st<=dr)
{ mid=(st+dr)/2;
if(v[mid]<=v[i]+v[j]&&v[mid]>=v[j]-v[i])
{ k++;
if(v[mid+1]<=v[i]+v[j]) st=mid+1;
else dr=mid-1;
}
else if(v[mid]>v[i]+v[j]) dr=mid-1;
else st=mid+1;
}
}
printf("%d\n",k);
return 0;
}