Cod sursa(job #164486)

Utilizator scvalexAlexandru Scvortov scvalex Data 24 martie 2008 12:21:28
Problema Numarare triunghiuri Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.71 kb
#include <iostream>
#include <fstream>
#include <algorithm>

using namespace std;

int N,
	L[801];

bool ls(const int &a, const int &b) {
	return a > b;
}

int find_last(int p, int r, int a, int b) {
	while (p < r) {
		int q = (p + r)/ 2;
		if (a <= L[q] + b)
			p = q + 1;
		else
			r = q;
	}
	return p;
}

int main(int argc, char *argv[]) {
	FILE *fi = fopen("nrtri.in", "r");
	fscanf(fi, "%d", &N);
	for (int i(0); i < N; ++i)
		fscanf(fi, "%d", L + i);
	fclose(fi);

	sort(L, L + N, ls);
	
	int total(0);
	for (int i(0); i < N; ++i)
		for (int j = i + 1; j < N; ++j) {
			int k = find_last(j, N - 1, L[i], L[j]);
			total += k - j;
		}
	
	ofstream fout("nrtri.out");
	fout << total << endl;
	fout.close();

	return 0;
}