Cod sursa(job #975694)

Utilizator harababurelPuscas Sergiu harababurel Data 21 iulie 2013 11:37:20
Problema Trapez Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.91 kb
#include <iostream>
#include <fstream>
#include <cmath>
#include <vector>
#include <algorithm>
#define epsilon 0.0000001
#define nmax 1005
#define inf 1<<30
using namespace std;

int n, sol, egale;
int x[nmax], y[nmax];

vector <double> p;

bool cmp(double a, double b) {
	return (a<b);
}


int main() {
	ifstream f("trapez.in");
	ofstream g("trapez.out");

	f>>n;
	for(int i=1; i<=n; i++) f>>x[i]>>y[i];

	for(int i=1; i<=n; i++)
		for(int j=i+1; j<=n; j++) {
			if(y[i] == y[j]) p.push_back(double(inf));
			else p.push_back( double((x[i]-x[j])) / (y[i]-y[j]) );
		}

	sort(p.begin(), p.end(), cmp);

	//for(int i=0; i<p.size(); i++) cout<<p[i]<<"\n";

	for(int i=0, j=0; i<p.size() && j+1<p.size(); i++) {
		j = i;
		egale = 0;
		while(j+1 < p.size() && p[j+1] - p[j] < epsilon) egale++, j++;

		sol += (egale * (egale+1)) / 2;

		i = j+1;
	}

	g<<sol<<"\n";

	return 0;
}