Cod sursa(job #1424273)

Utilizator tudorcomanTudor Coman tudorcoman Data 23 aprilie 2015 20:35:59
Problema Trapez Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.25 kb

#include <stdio.h>
#include <math.h>
#include <algorithm>

const char inFile [] = "trapez.in";
const char outFile [] = "trapez.out";
const double eps = 1e-12;
const int INFI = 2e9;

struct Point {
    int x,y;
    
};

void Read (Point& p) {
    int a,b;
    scanf("%d%d",&a,&b);
    p.x = a, p.y = b;
    return;
}

Point v[1001];
double p[1001 * 500 + 10];

double tan ( Point a, Point b ) {
    
    int p,q;
    
    p = a.x - b.x;
    q = a.y - b.y;
    
    if (!p) // vertical
        return INFI + 1;
    
    return (double) q / p * 1.0;
    
}

long long pairs (int objects) {
    return 1LL * objects * (objects - 1) >> 1;
}

int main(int argc, const char * argv[]) {
    
    freopen (inFile, "r", stdin);
    freopen (outFile, "w", stdout);
    short N;
    int k;
    long long Ans = 0;
    
    scanf("%hd",&N);
    
    for (short i=0; i < N; ++ i)
        Read(v[i]);
    
    for (short i = 0; i < N - 1; ++ i)
        for (short j = i + 1; j < N; ++ j)
            p[k ++] = tan (v[i],v[j]);
    
    int l = 1;
    
    std::sort (p, p + k);
    
    for (int i=0; i < k - 1; ++ i) {
        
        for (l = 1; i < k - 1 and fabs (p[i] - p[i+1]) < eps; ++ i, ++l);
            
        Ans += pairs(l);
    }
    
    printf("%lld\n",Ans);
    return 0;
}