Cod sursa(job #2917707)

Utilizator Ilie_MityIlie Dumitru Ilie_Mity Data 7 august 2022 11:54:48
Problema Trapez Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.23 kb
//Ilie Dumitru
#include<cstdio>
#include<algorithm>

const int NMAX=1000005;
int N, x[1000], y[1000];

int cmmdc(int a, int b)
{
    int aux;
    while(b)
    {
        aux=a%b;
        a=b;
        b=aux;
    }
    return a;
}

struct slope
{
    int x, y;
};

int n;
slope v[NMAX];

int main()
{
    FILE* f=fopen("trapez.in", "r"), *g=fopen("trapez.out", "w");
    int i, j, a, b, d, bit;
    long long int ans=0;
    fscanf(f, "%d", &N);
    for(i=0;i<N;++i)
    {
        fscanf(f, "%d%d", x+i, y+i);
        for(j=0;j<i;++j)
        {
            bit=0;
            a=x[i]-x[j];
            if(a<0)
                a=-a, ++bit;
            b=y[i]-y[j];
            if(b<0)
                b=-b, ++bit;
            d=cmmdc(a, b);
            a/=d;
            b/=d;
            if(bit&1)
                b=-b;
            v[n].x=a;
            v[n++].y=b;
        }
    }
    fclose(f);
    std::sort(v, v+n, [](slope a, slope b) {return a.x<b.x || (a.x==b.x && a.y<b.y);});
    for(i=0;i<n;i=j)
    {
        for(j=i+1;j<n && v[i].x==v[j].x && v[i].y==v[j].y;++j);
        a=j-i;
        ans+=(a*(long long int)(a-1))>>1;
    }
    fprintf(g, "%lld\n", ans);
    fclose(g);
    return 0;
}