Pagini recente » Cod sursa (job #1977458) | Cod sursa (job #512632) | Cod sursa (job #2640226) | Cod sursa (job #1530280) | Cod sursa (job #2349700)
#include <iostream>
#include <fstream>
#include <algorithm>
#include <map>
using namespace std;
fstream f("trapez.in", ios::in);
fstream g("trapez.out", ios::out);
struct point
{
int x, y;
point(int a, int b) : x(a), y(b) {}
point() {}
};
int n;
point v[1001];
map<pair<int, int>, int> slope;
void read()
{
f >> n;
for(int i = 0; i < n; ++i)
f >> v[i].x >> v[i].y;
}
int gcd(int a, int b)
{
if(b == 0)
return a;
return gcd(b, a % b);
}
void reduce(int &a, int &b)
{
int aa = a, bb = b;
if(a < 0)
aa = -a;
if(b < 0)
bb = -b;
int d = gcd(aa, bb);
a /= d;
b /= d;
}
void solve()
{
for(int i = 0; i < n; ++i)
for(int j = i + 1; j < n; ++j)
{
int mx = v[i].x - v[j].x;
int my = v[i].y - v[j].y;
reduce(mx, my);
if(mx < 0)
{
mx = -mx;
my = -my;
}
pair<int, int> p = make_pair(mx, my);
slope[p]++;
}
map<pair<int, int>, int>::iterator it;
int res = 0;
for(it = slope.begin(); it != slope.end(); ++it)
{
int num = it->second;
res += num * (num - 1) / 2;
}
g << res;
}
int main()
{
read();
solve();
return 0;
}