Pagini recente » Cod sursa (job #1331106) | Cod sursa (job #2398744) | Cod sursa (job #644214) | Cod sursa (job #741364) | Cod sursa (job #504764)
Cod sursa(job #504764)
#include<fstream>
#include<algorithm>
#define NMAX 1004
using namespace std;
ifstream f("trapez.in");
ofstream g("trapez.out");
struct panta{int a, b;} p[NMAX*NMAX];
struct punct{int x, y;} a[NMAX];
int n, m;
long long pos;
void pante()
{
int A, B, nv=0, no=0, aa, bb;
for (A=1; A<n; ++A)
for (B=A+1; B<=n; ++B)
{
aa=a[A].y-a[B].y;
bb=a[A].x-a[B].x;
if (aa==0) ++no;
if (bb==0) ++nv;
if (aa!=0 && bb!=0)
{
if (aa<0) p[++m].a=aa*(-1);
else p[++m].a=aa;
if (bb<0) p[m].b=bb*(-1);
else p[m].b=bb*(-1);
}
}
pos=no*(no-1)/2+nv*(nv-1)/2;
}
inline int cmp(panta w, panta q)
{
return q.b*w.a<q.a*w.b;
}
void citeste()
{
int i;
f>>n;
for (i=1; i<=n; ++i) f>>a[i].x>>a[i].y;
pante();
}
void cauta()
{
int i;
long long nr=1;
for (i=2; i<=m; ++i)
if (p[i-1].a*p[i].b==p[i-1].b*p[i].a) ++nr;
else
{
pos=pos+(nr*(nr-1)/2);
nr=1;
}
pos=pos+(nr*(nr-1)/2);
}
int main()
{
citeste();
sort(p+1, p+m+1, cmp);
cauta();
g<<pos<<"\n";
f.close();
g.close();
return 0;
}