Cod sursa(job #2091899)

Utilizator stefanchistefan chiper stefanchi Data 20 decembrie 2017 15:43:21
Problema Trapez Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.84 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);
    freopen("trapez.out","w",stdout);
    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()
{
    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;
            }
            if(cord[i].first < cord[j].first)
            {

                vec[nr_pante].numarator = cord[j].second - cord[i].second;
                vec[nr_pante].numitor = cord[j].second - cord[i].second;
                 nr_pante++;
            }
            else
            {
                vec[nr_pante].numarator = cord[i].second - cord[j].second;
                vec[nr_pante].numitor = cord[i].first - cord[j].first;

                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();
    printf("%lld",suma);
    return 0;
}