Cod sursa(job #1741440)

Utilizator stefzahZaharia Stefan Tudor stefzah Data 13 august 2016 21:22:49
Problema Trapez Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.28 kb
#include <fstream>
#include <algorithm>
using namespace std;
ifstream fin("trapez.in");
ofstream fout("trapez.out");
long long n,k,i,Xd,Yd,ct,q,d,r,k1,k2,j,s,p;
struct punct{int x,y;}a[1005];
struct dreapta {int xd,yd;}v[1000005];
inline bool cmp(dreapta A, dreapta B)
        {if(A.xd==B.xd)return A.yd<B.yd;
         else return A.xd<B.xd;
        }
int main()
{fin>>n;
 for(i=1;i<=n;i++)
    {fin>>a[i].x>>a[i].y;
    }
 for(i=1;i<=n;i++)
    {for(j=1;j<i;j++)
        {Xd=a[i].x-a[j].x;
         Yd=a[i].y-a[j].y;
         if(Yd<0){Yd=Yd*(-1);Xd=Xd*(-1);}
         if(Yd==0){q++;v[q].xd=-1;v[q].yd=-1;}
         else if(Xd==0){q++;v[q].xd=0;v[q].yd=0;}
         else {q++;
               if(Xd<0)k1=Xd*-1;
               else k1=Xd;
               if(Yd<0)k2=Yd*-1;
               else k2=Yd;
               d=1;
               while(k2!=0)
                    {r=k1%k2;
                     k1=k2;
                     k2=r;
                    }
                    d=k1;
               v[q].xd=Xd/d;v[q].yd=Yd/d;
               }
        }
    }
 sort(v+1,v+q+1,cmp);
 p=0;
 for(i=2;i<=q;i++)
    {if(v[i].xd==v[i-1].xd&&v[i].yd==v[i-1].yd)p++;
     else {p=p*(p+1)/2;
           s=s+p;
           p=0;
          }
    }
 p=p*(p+1)/2;
 s=s+p;
 fout<<s;
}