Cod sursa(job #2004380)

Utilizator victoreVictor Popa victore Data 25 iulie 2017 18:34:10
Problema Trapez Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.09 kb
#include<cstdio>
#include<cmath>
#include<algorithm>


using namespace std;

const int nmax=1005;
const double eps=1e-9;
const double inf=1e9;

struct point
{
    int x,y;
}p[nmax];

double pante[nmax*(nmax-1)/2];
int top;

inline bool cmp(double a,double b)
{
    return a-b<=eps;
}

int main()
{
    freopen("trapez.in","r",stdin);
    freopen("trapez.out","w",stdout);
    int n,i,j;
    scanf("%d",&n);
    for(i=1;i<=n;++i)
        scanf("%d%d",&p[i].x,&p[i].y);
    for(i=1;i<n;++i)
        for(j=i+1;j<=n;++j)
            if(fabs(p[i].x-p[j].x)<=eps)
            {
                if(p[i].y-p[j].y <=eps)
                    pante[++top]=inf;
                else
                    pante[++top]=-inf;
            }
            else
                pante[++top]=(double)(p[j].y-p[i].y)/(p[j].x-p[i].x);
    sort(pante+1,pante+top+1,cmp);
    int cnt;
    long long nrsol=0;
    for(i=1,cnt=1;i<top;++i)
        if(fabs(pante[i]-pante[i-1])<=eps)
            cnt++;
        else
            nrsol+= 1LL*(cnt*(cnt-1)),cnt=1;
    printf("%lld",nrsol/2);
}