Cod sursa(job #1447301)

Utilizator allexx2200Atanasiu Alexandru-Marian allexx2200 Data 4 iunie 2015 00:36:55
Problema Trapez Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.21 kb
#include <iostream>
#include <fstream>
#include <utility>
#include <algorithm>
 
using namespace std;
 
ifstream fin("trapez.in");
ofstream fout("trapez.out");
 
const int NMax = 1005;
const int INF = 1e9;
const double eror = 1e-14;
 
pair < int, int > v[NMax];
double p[NMax * NMax];
 
inline double get_pant(const pair < int, int > &A, const pair < int, int > &B){
    if(A.first == B.first){
        return INF;
    } else {
        return ((double)(B.second - A.second) / (double)(B.first - A.first));
    }
}
 
inline double modul(double x){
    return max(x, -x);
}
 
int main()
{
    int n, x, y, k, l;
    long long int ans = 0;
    fin >> n;
    for(int i = 1; i <= n; i++){
        fin >> x >> y;
        v[i] = make_pair(x, y);
    }
    k = 0;
    for(int i = 1; i < n; i++){
        for(int j = i + 1; j <= n; j++){
            p[++k] = get_pant(v[i], v[j]);
        }
    }
    sort(p + 1, p + k + 1);
    l = 1;
    for(int i = 2; i <= k; i++){
        if(modul((p[i - 1] - p[i])) < eror){
            l++;
        } else {
            ans += 1LL * l * (l - 1) / 2;
            l = 1;
        }
    }
    ans += 1LL * l * (l - 1) / 2;
    fout << ans;
    return 0;
}