Cod sursa(job #523648)

Utilizator Catah15Catalin Haidau Catah15 Data 18 ianuarie 2011 19:34:26
Problema Numarare triunghiuri Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.78 kb
#include <fstream>
#include <iostream>
using namespace std;

int x[802], n, k;

int bin_search(int i, int j)
{
	int st = j + 1, dr = n;
	
	while(st <= dr)
	{
		int m = (st + dr) / 2;
		
		if ((x[i] + x[j] >= x[m] && x[m + 1] > x[i] + x[j]) || (x[m] <= x[i] + x[j] && m == n))
			return m;
		
		else if(x[i] + x[j] >= x[m] && x[m + 1] <= x[i] + x[j])
			st = m + 1;
		
		else dr = m - 1;
	}
	
	return 0;	
}

int main()
{
	ifstream f("nrtri.in");
	ofstream g("nrtri.out");
	
	f >> n;
	
	for(int i = 1; i <= n; ++i)
		f >> x[i];
	
	sort(x + 1, x + n + 1);
	
	for(int i = 1; i < n; ++i)
		for(int j = i + 1; j <= n; ++j)
		{
			int b = bin_search(i, j);

			if(b)
				k = k + (b - j);
			
		}

	g << k;
	
	f.close();
	g.close();
	
	return 0;
}