Pagini recente » Cod sursa (job #776627) | Cod sursa (job #1312242) | Rating CNITV-Florescu-Pene-Stoian (teamKoch) | Cod sursa (job #897399) | Cod sursa (job #614238)
Cod sursa(job #614238)
#include <iostream>
#include <cstdio>
#include <algorithm>
#define NMax 1005
#define x first
#define y second
#define Infinity 2000000000
using namespace std;
int N, S, Line;
pair <int, int> P[NMax];
double M[NMax*NMax];
inline int Abs (int x)
{
if (x<0)
{
return -x;
}
return x;
}
int CMMDC (int a, int b)
{
while (b!=0)
{
int r=a%b;
a=b;
b=r;
}
if (a==0)
{
a=1;
}
return a;
}
double GetM (int i, int j)
{
int a=P[j].x-P[i].x;
int b=P[j].y-P[i].y;
int c=CMMDC (Abs (a), Abs (b));
a/=c;
b/=c;
if (a==0)
{
return 0;
}
if (b==0)
{
return Infinity;
}
return (double)((double)a/(double)b);
}
void Read ()
{
freopen ("trapez.in", "r", stdin);
scanf ("%d", &N);
for (int i=1; i<=N; ++i)
{
scanf ("%d %d", &P[i].x, &P[i].y);
for (int j=i-1; j>0; --j)
{
M[++Line]=GetM (i, j);
}
}
}
void Print ()
{
freopen ("trapez.out", "w", stdout);
printf ("%d\n", S);
}
int main()
{
Read ();
sort (M+1, M+Line+1);
int NM=0;
for (unsigned i=2; i<=Line; ++i)
{
if (M[i]==M[i-1])
{
++NM;
}
else
{
S+=(NM*NM+1/2);
NM=0;
}
}
Print ();
return 0;
}