Cod sursa(job #562213)

Utilizator gramatovici_paulGramatovici Paul gramatovici_paul Data 22 martie 2011 17:01:15
Problema Numarare triunghiuri Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.67 kb
#include<stdio.h>
#include<stdlib.h>

int n,v[802];

int caut(int p, int q)
{
	int i,pas=1<<9;
	for(i=0 ; pas ; pas/=2)
		if(i+pas<=n && v[i+pas]<=p+q && v[i+pas]+p>=q && v[i+pas]+q>=p)
			i += pas;
	return i;
}
	

int cmp(const void *p, const void *q)
{
	int x=*(int*)p, y=*(int*)q;
	if (x>y) return 1;
	if (x<y) return -1;
	return 0;
}

int main()
{
	int i,j,nrtri=0,k;
	freopen("nrtri.in","r",stdin);
	freopen("nrtri.out","w",stdout);
	scanf("%d",&n);
	for(i=1;i<=n;++i)
		scanf("%d",&v[i]);
	qsort(v+1,n,sizeof(v[0]),cmp);
	for(i=1;i<=n;++i)
		for(j=i+1;j<=n;++j)
		{
			k=caut(v[i],v[j]);
			if (k!=0)
				nrtri+=k-j;
		}
		printf("%d",nrtri);
}