Cod sursa(job #1151710)

Utilizator swim406Teudan Adina swim406 Data 24 martie 2014 12:24:47
Problema Trapez Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.17 kb
#include <stdio.h>
#define NMAX 1001
#define MMAX 500000
#include <algorithm>

using namespace std;

bool cm (double a, double b) {
    return a < b;
}

double v[MMAX];

int main() {
    int N, i, j, a, b, vert = 0, oriz = 0, sol = 0, temp;
    double pt;
    int x[NMAX], y[NMAX];
    freopen ("trapez.in", "r", stdin);
    freopen ("trapez.out", "w", stdout);
    scanf ("%d", &N);
    for (i = 1; i <= N; ++i)
        scanf ("%d %d", &x[i], &y[i]);
    int count = -1;
    for (i = 1; i < N; ++i)
        for (j = i + 1; j <= N; ++j) {
            a = x[i] - x[j];
            b = y[i] - y[j];
            if (a != 0) {
                if (b == 0) ++oriz;
                else {
                    pt = b/(double)a;
                    v[++count] = pt;
                }
            }
            if (a == 0) ++vert;
        }
    sort (v, v + count, cm);
    temp = 1;
    for (i = 1; i < count; ++i) {
        if (v[i] == v[i-1])
            ++temp;
        else {
            sol += temp*(temp-1)/2;
            temp = 1;
        }

    }
    sol += vert*(vert-1)/2;
    sol += oriz*(oriz-1)/2;
    printf ("%d", sol);
    return 0;
}