Cod sursa(job #2198884)

Utilizator Cosmin2004_InfoMoldoveanu Cosmin Cosmin2004_Info Data 25 aprilie 2018 18:55:49
Problema Trapez Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.44 kb
#include <cstdio>

using namespace std;
struct COORDINATES{
    int x,y;
};
COORDINATES v[1001],aux;
struct ANGLE{
    int x,y,f;
};
ANGLE f[1001];
int k=0;
void add(COORDINATES a)
{
    int i,ok=0;
    for(i=1;i<=k;i++)
        if(a.x==f[i].x && a.y==f[i].y)
        {
            ok=1;
            f[i].f++;
            break;
        }
        else
            if((a.x==0 && f[i].x==0) || (a.y==0 && f[i].y==0))
            {
                ok=1;
                f[i].f++;
                break;
            }
    if(ok==0)
    {
        f[++k].x=a.x;
        f[k].y=a.y;
        f[k].f=1;
    }
}
int cmmdc(int a,int b)
{
    int r;
    if(a<0)
        a=0-a;
    if(b<0)
        b=0-b;
    if(b==0 || a==0)
        return 1;
    r=a%b;
    while(r)
    {
        a=b;
        b=r;
        r=a%b; 
    }
    return b;
}

int main()
{
    freopen("trapez.in","r",stdin);
    freopen("trapez.out","w",stdout);
    int i,n,j,d,t=0;
    scanf("%d", &n);
    for(i=1;i<=n;i++)
        scanf("%d%d", &v[i].x,&v[i].y);
    for(i=1;i<=n;i++)
    {
        for(j=i+1;j<=n;j++)
        {
            aux.x=v[i].x-v[j].x;
            aux.y=v[i].y-v[j].y;
            d=cmmdc(aux.x,aux.y);
            aux.x/=d;
            aux.y/=d;
            add(aux);
        }
    }
    for(i=1;i<=k;i++)
    {
        if(f[i].f>1)
            t+=(f[i].f*(f[i].f-1))/2;
    }
    printf("%d", t);
    return 0;
}