Cod sursa(job #1339619)

Utilizator retrogradLucian Bicsi retrograd Data 11 februarie 2015 00:08:43
Problema Trapez Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.13 kb
#include<fstream>
#include<algorithm>
#include<cmath>
#include<limits>

using namespace std;

typedef double var;
const var eps = 1e-10;

ifstream fin("trapez.in");
ofstream fout("trapez.out");

struct Punct{var x, y;};

Punct PUNCTE[1001];
var PANTA[800001];

bool cmp(var a, var b) {
    return a>b;
}

int main() {

    var n;
    fin>>n;

    for(int i=1; i<=n; i++) {
        fin>>PUNCTE[i].x>>PUNCTE[i].y;
    }

    int dr = 0;

    for(int i=1; i<n; i++) {
        for(int j=i+1; j<=n; j++) {
            Punct a = PUNCTE[i];
            Punct b = PUNCTE[j];

            if(a.x>b.x) swap(a, b);

            if(b.x==a.x) {
                PANTA[++dr] = numeric_limits<var>::max();
                continue;
            }

            PANTA[++dr] = (b.y-a.y)/(b.x-a.x);
        }
    }

    sort(PANTA+1, PANTA+dr+1, cmp);

    int e, count=0;
    int c;
    for(int i=1; i<dr; i++) {
        c=1;
        e=i+1;
        while(abs(PANTA[e]-PANTA[i])<eps) {
            c++;
            e++;
        }
        count += c*(c-1)/2;
        i=e-1;
    }

    fout<<count;

    return 0;
}