Cod sursa(job #350650)

Utilizator toni2007Pripoae Teodor Anton toni2007 Data 25 septembrie 2009 09:29:50
Problema Trapez Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.78 kb
#include <stdio.h>
#include <stdlib.h>
#include <algorithm>
#include <iostream>

using namespace std;

#define maxN 1010
#define x    first
#define y    second
#define er   0.0000000001

using namespace std;

pair <int, int> coord[maxN];
int N, k;
long double panta[maxN * maxN];

long double myabs( long double a) {
       if (a < 0) return -a;
       return a;
}

int main(){
        int k = 0, i, j, s = 0, t = 1;
    
        freopen("trapez.in","r",stdin);
        freopen("trapez.out","w",stdout);
    
        scanf("%d", &N);
    
        for (i = 1; i <= N; ++ i)
                scanf("%d%d", &coord[i].x, &coord[i].y);

        for (i = 1; i < N; ++ i)
                for (j = i + 1; j <= N; ++ j){
                        ++ k;
                        if (coord[i].y != coord[j].y)
                            panta[k] = 1.0 * (coord[i].x - coord[j].x) / (coord[i].y - coord[j].y);
                        else
                            panta[k] = 1.0 * 2147000000 * 10000;
/*                        panta[k].x = coord[j].x - coord[i].x;
                        panta[k].y = coord[j].y - coord[i].y;
                        if (panta[k].x < 0 && panta[k].y < 0) {
                                panta[k].x = - panta[k].x;
                                panta[k].y = - panta[k].y;
                        }*/
                }
 
        sort (panta + 1, panta + k + 1);
    

                
        t = 1;
        for (i = 1; i < k; ++ i){
                if (myabs(panta[i] - panta[i + 1]) < er)
                        ++ t;
                else {
                        s += t * (t - 1) / 2;
                        t = 1;
                }
        }

        s += t * (t - 1) / 2;

        printf("%d\n", s);
        return 0;
}