Pagini recente » Cod sursa (job #655800) | Cod sursa (job #112116) | Viata de dupa olimpiade? (I) | Cod sursa (job #3261697) | Cod sursa (job #2083311)
#include <iostream>
#include <fstream>
#include <cmath>
#include <vector>
#include <algorithm>
#define precizie 0.00000000001
using namespace std;
int n, sol, egale;
int x[1050], y[1050]; //x[i] si y[1] sunt coordonatele punctului i
vector <double> panta;
int 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++) {
panta.push_back( double(y[j] - y[i]) / (x[j] - x[i]) );
}
sort(panta.begin(), panta.end(), cmp);
egale = 1;
for(int i=0, j=0; i<panta.size() && j+1<panta.size(); ) {
j = i;
while(j+1 < panta.size() && panta[j+1] - panta[j] < precizie) egale++, j++;
//sunt aproape egale , cu o mica mica diferenta
sol += (egale * (egale-1)) / 2; // sa nu le numaram de 2 ori :)
egale = 1;
i = j+1;
}
g<<sol<<"\n";
return 0;
}