Pagini recente » Cod sursa (job #1650024) | Cod sursa (job #1672693) | Cod sursa (job #1854539) | Cod sursa (job #1792799) | Cod sursa (job #1551492)
#include <cmath>
#include <fstream>
#include <vector>
struct Point {
double x, y;
};
static auto get_square_dist(Point const &p1, Point const &p2) -> double {
return (p1.x - p2.x) * (p1.x - p2.x) + (p1.y - p2.y) * (p1.y - p2.y);
}
static auto are_equal_epsilon(double a, double b) -> bool {
static auto const epsilon = 0.001;
return std::abs(a - b) < epsilon;
}
static auto form_equilateral_triangle(Point const &p1, Point const &p2,
Point const &p3) -> bool {
auto d12 = get_square_dist(p1, p2);
auto d23 = get_square_dist(p2, p3);
return are_equal_epsilon(d12, d23) &&
are_equal_epsilon(d12, get_square_dist(p1, p3));
}
auto main() -> int {
std::ifstream fin{"triang.in"};
auto points = std::vector<Point>();
// read
auto n = int{};
fin >> n;
auto const size = n;
points.reserve(size);
for (auto i = 0; i < size; ++i) {
Point p;
fin >> p.x >> p.y;
points.emplace_back(p);
}
fin.close();
// naive solution, 1 dist out of loop
auto num = 0;
for (auto i = 0; i < size - 2; ++i) {
for (auto j = i + 1; j < size - 1; ++j) {
auto const d_ij = get_square_dist(points[i], points[j]);
for (auto k = j + 1; k < size; ++k) {
auto const d_ik = get_square_dist(points[i], points[k]);
if (are_equal_epsilon(d_ij, d_ik) &&
are_equal_epsilon(d_ij, get_square_dist(points[j], points[k]))) {
++num;
}
}
}
}
std::ofstream fout("triang.out");
fout << num;
return 0;
}