Cod sursa(job #164517)

Utilizator scvalexAlexandru Scvortov scvalex Data 24 martie 2008 12:55:36
Problema Numarare triunghiuri Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.89 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 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);
	
	/*for (int i(0); i < N; ++i)
		cout << L[i] << " ";
	cout << endl;*/
	
	int total(0);
	for (int i(0); i < N; ++i)
		for (int j = i + 1; j < N - 1; ++j) {
			int p = j + 1;
			int r = N - 1;
			while (p < r) {
				int q = (p + r) / 2;
				if (L[i] >= L[j] + L[q])
					r = q;
				else
					p = q + 1;
			}
			//cout << i << " " << j << " " << p << endl;
			total += p - j;
			if ((p == j + 1) && (L[i] > L[j] + L[j + 1]))
				--total;
			//cout << total << endl;
		}
	
	ofstream fout("nrtri.out");
	fout << total << endl;
	fout.close();

	return 0;
}