Cod sursa(job #1706801)

Utilizator eragon0502Dumitrescu Dragos eragon0502 Data 23 mai 2016 11:52:09
Problema Trapez Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.15 kb
#include <cstdio>
#include <algorithm>
#include <cmath>

using namespace std;
const int INF = 999999999;
const double eps = 2.e-8;
struct POINT{
int x,y;
}p[1005];

double panta(POINT P1, POINT P2)
{
    if(P1.x==P2.x)
        return INF;
    return 1.0*(P2.y-P1.y)/(P2.x-P1.x);
}

bool paralel(double m1,double m2)
{
    if(fabs(m1-m2)<eps)
        return 1;
    return 0;
}

double m[500000];

int main()
{
    freopen("trapez.in","r",stdin);
    freopen("trapez.out","w",stdout);
    int n,ans,num,tmpx,tmpy,k,i,j;
    scanf("%d",&n);
    for(i=1;i<=n;++i)
        {
            scanf("%d %d",&tmpx,&tmpy);
            p[i].x=tmpx;
            p[i].y=tmpy;
        }
    k=0;
    for(i=1;i<=n;++i)
        for(j=i+1;j<=n;++j)
            {
                m[++k]=panta(p[i],p[j]);
            }
    sort(m+1,m+k+1);
    num=1;
    ans=0;
    for(i=2;i<=k;++i)
        {
            if(m[i]==m[i-1])
                ++num;
            else
                {
                    ans+=num*(num-1)/2;
                    num=1;
                }
        }
    ans+=num*(num-1)/2;
    printf("%d",ans);
    return 0;
}