Pagini recente » Cod sursa (job #320239) | Cod sursa (job #484077) | Cod sursa (job #2063617) | Cod sursa (job #2875580) | Cod sursa (job #132682)
Cod sursa(job #132682)
#include <cstdio>
#include <cassert>
#include <vector>
#include <algorithm>
#include <map>
using namespace std;
#define NMAX 1024
#define INF 0x3f3f3f3f
#define pb push_back
#define mp make_pair
#define f first
#define s second
int N;
int X[NMAX], Y[NMAX];
vector < pair<int, int> > panta;
void read ()
{
scanf ("%d\n", &N);
int i;
for (i = 1; i <= N; ++ i)
scanf ("%d %d\n", X + i, Y + i);
}
inline int cmmdc(int a, int b)
{
int c;
while (b)
{
c = a % b;
a = b;
b = c;
}
return a;
}
void Get_Panta ()
{
int i, j, x, y, d;
for (i = 1; i <= N; ++ i)
for (j = i + 1; j <= N; ++ j)
{
x = X[i] - X[j];
y = Y[i] - Y[j];
d = cmmdc (x, y);
panta.pb(mp (x/d, y/d));
}
}
int Get_Sol ()
{
int i, sz, x = 2, y = 4, cnt, sol = 0;
for (i = 0, sz = panta.size(); i < sz; ++ i)
if (x != panta[i].f || y != panta[i].s)
{
sol += (cnt * (cnt-1)) >> 1;
cnt = 1;
x = panta[i].f, y = panta[i].s;
}
else
++ cnt;
return sol;
}
void solve ()
{
Get_Panta ();
printf ("%d\n", Get_Sol ());
}
int
main ()
{
freopen ("trapez.in", "rt", stdin);
freopen ("trapez.out", "wt", stdout);
read ();
solve ();
return 0;
}