Pagini recente » Cod sursa (job #2064925) | Cod sursa (job #2106790) | Cod sursa (job #598928) | Cod sursa (job #1799368) | Cod sursa (job #1774417)
#include<fstream>
#include<math.h>
#include<map>
using namespace std;
ifstream in("trapez.in");
ofstream out("trapez.out");
map<pair<long long, long long>, long long> mp;
typedef pair<long long, long long> POINT2D;
POINT2D points[1010];
int N;
long long Abs(long long x)
{
return (x > 0) ? x : -x;
}
long long cmmdc(long long a, long long b)
{
while (b)
{
long long r = a%b;
a = b;
b = r;
}
return a;
}
int main()
{
in >> N;
for (int i = 1;i <= N;++i)
in >> points[i].first >> points[i].second;
for (int i = 1;i <= N;++i)
{
for (int j = i+1;j <= N;++j)
{
if (points[i].first - points[j].first == 0)
mp[make_pair(1LL << 63, 1LL << 63)]++;
else if (points[i].second - points[j].second == 0)
mp[make_pair(0, 0)]++;
else
{
long long v_y = points[i].second - points[j].second, v_x = points[i].first - points[j].first;
long long cm = cmmdc(Abs(v_y), Abs(v_x));
if (v_y < 0 && v_x < 0)
v_x *= -1, v_y *= -1;
else if (v_x < 0 || v_y < 0)
{
if (v_x < 0)
v_y *= -1,v_x*=-1;
}
mp[make_pair(v_y / cm, v_x / cm)]++;
}
}
}
long long rez = 0;
for (auto i = mp.begin();i != mp.end();++i)
{
rez += (*i).second*((*i).second - 1) / 2;
}
out << rez;
return 0;
}