Pagini recente » Cod sursa (job #169627) | Cod sursa (job #1750494) | Cod sursa (job #1688069) | Cod sursa (job #1391514) | Cod sursa (job #1741440)
#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;
}