Cod sursa(job #1648663)

Utilizator tqmiSzasz Tamas tqmi Data 11 martie 2016 11:12:34
Problema Trapez Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.71 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
ifstream fin("trapez.in");
ofstream fout("trapez.out");
struct panta
{
    int x,y,s;
};
vector <panta> p;
panta a;
int N,i,j,d,x[1005],y[1005],X,Y,K,k,Sol,L2;
void read()
{
    fin>>N;
    for(i=1;i<=N;i++)
    {
        fin>>x[i];
        fin>>y[i];
    }
}
bool Compare( panta a , panta b )
{
    if(a.s == b.s)
    {
        if( a.x == b.x )
            return ( a.y < b.y );
        else
            return ( a.x < b.x );
    }
    return a.s < b.s;
}
int abs(int a)
{
    if(a<0)
        return -a;
    return a;
}
int cmmdc(int a, int b)
{
    if(!b)
    {
        return a;
    }
    return cmmdc(b,a%b);
}
void solve()
{
    for(i=1;i<=N;i++)
    {
        for(j=i+1;j<=N;j++)
        {
            X=x[i]-x[j];
            Y=y[i]-y[j];
            if((X>0 && Y<0) || (X<0 && Y>0))
            {
                a.s=-1;
            }
            else
            {
                a.s=1;
            }
            if(X<0 && Y<0)
            {
                X=-X;
                Y=-Y;
            }
            d=abs(cmmdc(X,Y));
            if(d!=0)
            {
                X=X/d;
                Y=Y/d;
            }
            a.x=X;
            a.y=Y;
            p.push_back(a);
        }
    }
    sort(p.begin(),p.end(),Compare);
    L2=p.size();
    for(i=0;i<L2-1;++i)
        if(p[i].x == p[i+1].x && p[i].y == p[i+1].y && p[i].s == p[i+1].s)  k++;
        else
        {
            Sol += k*(k-1)/2;
            k = 1;
        }
    Sol += k*(k-1)/2;
    fout<<Sol<<"\n";
}
int main()
{
    read();
    solve();
    return 0;
}