Cod sursa(job #629009)

Utilizator matemariaescuMaria Mateescu matemariaescu Data 2 noiembrie 2011 16:18:19
Problema Numarare triunghiuri Scor 0
Compilator cpp Status done
Runda gc_practice Marime 0.78 kb
# include <cstdio>
# include <algorithm>

using namespace std;

int n, st,dr,mij,i,j,a,b;
int lg[900];
int sol=1;


int main ()
{
	freopen ("nrtri.in","r",stdin);
	freopen ("nrtri.out","w",stdout);
	scanf ("%d",&n);
	for (i=1;i<=n;i++)
	{
		scanf ("%d",&lg[i]);
	}
	sort(lg+1,lg+n+1);
	for (i=1;i<=n;i++)
		for (j=i+1;j<=n;j++)
		{
			//maximul
			a=lg[i]+lg[j];
			st=j+1; dr=n;
			while (st<dr)
			{
				mij=st+(dr-st)/2;
				if (lg[mij]>a)
					dr=mij-1;
				else st=mij;
			}
			if (st==dr)
			{
				a=dr;
			}
			else a=-1;
			b=lg[j]-lg[i];
			st=j+1; dr=n;
			while (st<dr)
			{
				mij=st+(dr-st)/2;
				if (lg[mij]<b)
					st=mij+1;
				else dr=mij;
			}
			if (st==dr)
			{
				b=dr;
			}
			else b=-1;
			if (a!=-1&&b!=-1)
			{
				sol+=(a-b+1);
			}
		}
	printf("%d\n",sol);
	return 0;
}