Cod sursa(job #2091911)

Utilizator stefanchistefan chiper stefanchi Data 20 decembrie 2017 16:00:07
Problema Trapez Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.76 kb
#include <cstdio>
#include <algorithm>
using namespace std;
const int NMAX = 1010;
int n,nr;
long long suma;
pair<int,int> cord[NMAX];
int nr_pante;

struct coord
{
    long long numarator,numitor;
} vec[4000000];

void read()
{
    freopen("trapez.in","r",stdin);
    scanf("%d",&n);
    int a,b;
    for(int i = 0 ; i < n ; i++)
    {
        scanf("%d %d",&a,&b);
        cord[i].first = a;
        cord[i].second = b;
    }
}

bool cmp(coord a, coord b)
{
    if(b.numitor*a.numarator < b.numarator*a.numitor)
        return 1;
    return 0;
}


void pante()
{
    int al_de_sus,al_de_jos;
    for(int i = 0 ; i < n - 1; i++)
    {
        for(int j = i + 1 ; j < n ; j++)
        {
            if(cord[i].first - cord[j].first== 0)
            {
                nr++;
                continue;
            }
            al_de_sus = cord[j].second - cord[i].second;
            al_de_jos = cord[j].first - cord[i].first;
            if(al_de_jos < 0)
            {
                    al_de_sus*= -1;
                    al_de_jos*= -1;
            }
            vec[nr_pante].numitor = al_de_jos;
            vec[nr_pante].numarator = al_de_sus;
            nr_pante++;
        }
    }
    sort(vec,vec+nr_pante,cmp);
}

void result()
{
    long long aux = 1;
    for(int i = 1 ; i < nr_pante; i++)
    {
        if((vec[i].numitor*vec[i-1].numarator)==(vec[i].numarator*vec[i-1].numitor))
        {
            aux++;
        }
        else
        {
            suma += aux*(aux-1)/2 ;
            aux = 1;
        }
    }
    suma+=aux*(aux-1)/2;
    suma+=nr*(nr-1)/2;
}


int main()
{
    read();
    pante();
    result();
    freopen("trapez.out","w",stdout);
    printf("%lld",suma);
    return 0;
}