Cod sursa(job #3279302)

Utilizator Antonio_BiscoveanuAntonio Biscoveanu Antonio_Biscoveanu Data 22 februarie 2025 14:24:49
Problema Trapez Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.19 kb
#include <stdio.h>
#define NMAX 1000*1000
#include <cmath>
#include <algorithm>
using namespace std;

double pante[NMAX];
int n,nrp,totalt;
FILE *fin,*fout;

struct puncte
{
    int x;
    int y;
} v[1005];

const double inf=20000000000;
const double eps=1.0e-12;
double panta(puncte a,puncte b)
{
    double dif=(double)a.x-b.x;
    if(dif<0)
    {
        dif=-dif;
    }
    //fabs(a.x,b.x);
    if(dif<eps)
    {
        return inf;
    }
    return (double)(a.y-b.y)/(a.x-b.x);
}
int main()
{
    fin=fopen("trapez.in","r");
    fout=fopen("trapez.out","w");

    fscanf(fin,"%d",&n);
    for(int i=1; i<=n; i++)
    {
        fscanf(fin,"%d %d",&v[i].x,&v[i].y);

    }
    fclose(fin);

    for(int i=1; i<n; i++)
    {
        for(int j=i+1; j<=n; j++)
        {
            double p=panta(v[i],v[j]);
            nrp++;
            pante[nrp]=p;
        }
    }
    sort(pante+1,pante+nrp+1);
    int l=1;
    for(int i=2; i<=nrp; i++)
    {
        if(fabs(pante[i-1]-pante[i])<eps)
        {
            l++;

        }
        else
        {
            totalt+=(l-1)*l/2;
            l=1;
        }
    }
    if(l>1)
    {
         totalt+=(l-1)*l/2;
    }
    fprintf(fout,"%d",totalt);
    return 0;
}