Cod sursa(job #350643)

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

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

using namespace std;

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

double myabs( 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[j].y != coord[j].x)
                            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);
    
        /*for (i = 1; i <= k; ++ i)
                printf("%d %d\n", panta[i].x, panta[i].y);*/

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

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

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