Cod sursa(job #1142820)

Utilizator paunmatei7FMI Paun Matei paunmatei7 Data 14 martie 2014 11:46:05
Problema Trapez Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.07 kb
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <vector>

#define Eps 1e-14
#define x first
#define y second
#define NMAX 1007
#define INF 2000000007

using namespace std;

pair< double, double > a[NMAX];
vector< double > Pant;

inline double Panta(pair< double, double > A, pair< double, double > B){
    if(fabs(B.x - A.x) < Eps)
        return (double) INF;
    return (double)(B.y - A.y) / (double)(B.x - A.x);
}

int main(){
    int n;
    freopen("trapez.in", "r", stdin);
    freopen("trapez.out", "w", stdout);
    scanf("%d", &n);
    for(int i = 1; i <= n; ++i)
        scanf("%lf %lf", &a[i].x, &a[i].y);
    for(int i = 1; i <= n; ++i)
        for(int j = i + 1; j <= n; ++j)
            Pant.push_back(Panta(a[i], a[j]));
    int Cnt = 1, Ans = 0;
    sort(Pant.begin(), Pant.end());
    for(int i = 0; i < Pant.size() - 1; ++i)
        if(fabs(Pant[i] - Pant[i + 1]) < Eps)
            ++Cnt;
        else{
            Ans += (Cnt * (Cnt - 1)) / 2;
            Cnt = 1;
        }
    printf("%d", Ans);
    return 0;
}