Cod sursa(job #2012348)

Utilizator amaliarebAmalia Rebegea amaliareb Data 18 august 2017 16:17:54
Problema Trapez Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.26 kb
#include <iostream>
#include <fstream>
#include <algorithm>
#include <bits/stdc++.h>

using namespace std;
struct miau{int x,y;} v[1005],p1,p2,drepte[1000005];
int n,i,j,k,m=0,semn,C,eq,s;
ifstream f("trapez.in");
ofstream g("trapez.out");

bool cmp(miau a, miau b)
{
    return a.y<b.y || (a.y==b.y && a.x<b.x);
}

int cmmdc(int a, int b)
{
    if(a>b) return cmmdc(b,a);
    if(a>0) return cmmdc(b%a,a);
    if(a==0) return b;
}

int main()
{
    f>>n;
    for(i=1;i<=n;i++) f>>v[i].x>>v[i].y;
    sort(v+1,v+n+1,cmp);
    for(i=1;i<n;i++)
    {
        for(j=i+1;j<=n;j++)
        {
            p1=v[i]; p2=v[j];
            semn=1;
            p2.x-=p1.x;
            p1.x=0;
            p2.y-=p1.y;
            p1.y=0;
            if(p2.x<0) semn=-1, p2.x*=-1;
            C=cmmdc(p2.x,p2.y);
            p2.x/=C;
            p2.y/=C;
            p2.x*=semn;
            drepte[++m]=p2;
        }
    }
    eq=1; s=0;
    sort(drepte+1,drepte+m+1,cmp);
    drepte[++m]={-1,-1};
    p1=drepte[1];
    for(i=2;i<=m;i++)
    {
        if(drepte[i].x==p1.x && drepte[i].y==p1.y) eq++;
        else
        {
            s+=eq*(eq-1)/2;
            eq=1;
            p1=drepte[i];
        }
    }
    g<<s<<'\n';
    return 0;
}