Cod sursa(job #1302867)

Utilizator akaprosAna Kapros akapros Data 27 decembrie 2014 13:58:53
Problema Pachete Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.15 kb
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
int n,i,j,nr,x1,y1,x2,y2,d;
struct nod
{
    int x;
    int y;
}v[50005];
int cmp(const nod a,const nod b)
{
    if (a.x==b.x) return a.y<b.y;
    return a.x<b.x;
}
int cmmdc(int x,int y)
{
    int d,i,r;
    d=max(x,y); i=min(x,y);
    r=d%i;
    while (r) d=i,i=r,r=d%i;
    return i;
}
int main()
{
    freopen("pachete.in","r",stdin);
    freopen("pachete.out","w",stdout);
    scanf("%d",&n);
    scanf("%d %d",&x1,&y1);
    for(i=1;i<=n;i++)
    {
        scanf("%d %d",&x2,&y2);
        if ((x2-x1==0))
        {
            v[i].x=0; v[i].y=1;
            continue;
        }
        if ((y2-y1==0))
        {
            v[i].y=0; v[i].x=1;
            continue;
        }
        d=cmmdc(x2-x1,y2-y1);
        v[i].x=(x2-x1)/d; v[i].y=(y2-y1)/d;
        if ((v[i].x>0)&&(v[i].y<0)) v[i].x=-v[i].x,v[i].y=-v[i].y;
        if ((v[i].x<0)&&(v[i].y<0)) v[i].x=-v[i].x,v[i].y=-v[i].y;
    }
    sort(v+1,v+n+1,cmp); nr=1;
    for (i=2;i<=n;i++)
    if ((v[i].x!=v[i-1].x)||(v[i].y!=v[i-1].y))
    nr++;
    printf("%d",nr);
    return 0;
}