Pagini recente » Cod sursa (job #1030560) | Cod sursa (job #3170585) | Cod sursa (job #1030170) | Cod sursa (job #2890529)
#include <bits/stdc++.h>
using namespace std;
#define NMAX 1505
bool find(pair<double, double> p, pair<double, double> *v, int n)
{
int i, step;
for (step = 1; step <= n; step <<= 1);
for (i = 1; step; step >>= 1)
if (i + step <= n && p.first - v[i + step].first >= -1e-3 && p.second - v[i + step].second >= -1e-3)
i += step;
return abs(p.first - v[i].first) <= 1e-3 && abs(p.second - v[i].second) <= 1e-3;
}
int main()
{
ifstream fin("triang.in");
ofstream fout("triang.out");
int n;
fin >> n;
pair<double, double> v[NMAX];
for (int i = 1; i <= n; ++i)
fin >> v[i].first >> v[i].second;
sort(v + 1, v + n + 1);
long long ans = 0;
const double hsqrt3 = sqrt(3) / 2;
for (int i = 1; i < n; ++i)
for (int j = i + 1; j <= n; ++j) {
pair<double, double> mid = {(v[i].first + v[j].first) / 2, (v[i].second + v[j].second) / 2};
double x_dist = (v[j].second - v[i].second) * hsqrt3, y_dist = (v[j].first - v[i].first) * hsqrt3;
ans += find({mid.first + x_dist, mid.second - y_dist}, v, n);
ans += find({mid.first - x_dist, mid.second + y_dist}, v, n);
}
fout << ans / 3 << '\n';
}