Cod sursa(job #2083311)

Utilizator karenalo13Diaconu Iulian Andrei karenalo13 Data 7 decembrie 2017 15:27:27
Problema Trapez Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.02 kb
#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;
}