Cod sursa(job #130608)

Utilizator marius135Dumitran Adrian Marius marius135 Data 1 februarie 2008 16:05:00
Problema Numarare triunghiuri Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.72 kb
#include<stdio.h>
#include<algorithm>

using namespace std;

long v[1024];
long s[(1<<16)],nr[(1<<16)];

int main()
{
	freopen("nrtri.in","r",stdin);
	freopen("nrtri.out","w",stdout);
	
	long n,sol = 0;
	scanf("%ld",&n);
	for( long i = 1; i <= n; ++i)
	{
		scanf("%ld",&v[i]);
		nr[v[i]]++;
	}
	for ( long i = 1; i <= 60000;++i)
	{
		s[i] = s[i-1] + nr[i];
	}
	
	sort(v+1,v+n+1);
	
	for( long i = 1; i<= n; ++i)
		for( long j = i+1; j <= n ;++j)
		{
			sol+= s[v[i] + v[j]] - s[v[j]];
		} 
	for( long i = 1; i <= 60000;++i)
	{
		sol+= (nr[i] *(nr[i]-1) *(nr[i]-2))/6;
	}
	
	for( long i = 1; i <= 60000;++i)
	{
		sol+= (nr[i] *(nr[i]-1))*s[i-1]/2;
	}
	printf("%ld\n",sol);
	
	
	
	return 0;
}