Cod sursa(job #663157)

Utilizator repp4raduRadu-Andrei Szasz repp4radu Data 17 ianuarie 2012 22:03:32
Problema Trapez Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.25 kb
#include <cstdio>
#include <cmath>
#include <algorithm>

#define egal 0.00000000001
#define inf 1000000000
#define MAX 1050

using namespace std;

struct punct
{
    int x, y;
}v[MAX];

int n, nr, sol;
double panta[MAX*MAX];

void citire()
{
    freopen("trapez.in", "r", stdin);
    scanf("%d\n", &n);
    for(int i = 1; i <= n; i++)
    {
        scanf("%d %d\n", &v[i].x, &v[i].y);
    }
    fclose(stdin);
}

void rezolvare()
{
    int k = 0;
    for(int i = 1; i < n; i++)
    {
        for(int j = i + 1; j <= n; j++)
        {
            if(v[i].x - v[j].x == 0)
            {
                panta[k++] = inf;
            }
            else
            {
                panta[k++] = (double)(v[j].y - v[i].y) / (double)(v[j].x - v[i].x);
            }
        }
    }
    sort(panta, panta + k);
    for(int i = 0; i < k; i++)
    {
        if(abs(panta[i] - panta[i - 1]) < egal)
        {
            nr++;
        }
        else
        {
            sol += (nr * (nr + 1) / 2);
            nr = 0;
        }
    }
}

void afisare()
{
    freopen("trapez.out", "w", stdout);
    printf("%d", sol);
    fclose(stdout);
}
int main()
{
    citire();
    rezolvare();
    afisare();
    return 0;
}