Cod sursa(job #629020)

Utilizator SmarandaMaria Pandele Smaranda Data 2 noiembrie 2011 16:22:25
Problema Numarare triunghiuri Scor 0
Compilator cpp Status done
Runda gc_practice Marime 0.71 kb
#include<cstdio>
#include<cstdlib>
#include<algorithm>
using namespace std;
long n;
long a[808];
void read()
{
	scanf("%ld",&n);
	for (long i=1;i<=n;i++)
		scanf("%ld",&a[i]);
}

void rez()
{
	long st,dr,m,i,j,s,num=0;
	sort(a+1,a+1+n);
	for (i=1;i<=n;i++)
		for (j=i+1;j<=n;j++)
		{
			st=1;
			dr=n;
			s=a[i]+a[j];
			while(st<=dr)
			{
				m=(st+dr)/2;
				if (a[m]<=s && a[i]<=a[j]+a[m] && a[j]<=a[m]+a[i])
				{
					if (m>j)
						num++;
					st=m+1;
				}	
				else
					if (a[m]>s)
						dr=m-1;
					else
						st=m+1;
			}
		}
	printf("%ld\n",num);
}

int main ()
{
	freopen("nrtri.in","r",stdin);
	freopen("nrtri.out","w",stdout);
	
	read();
	rez();
	return 0;
}