Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <cmath>
- namespace helper
- {
- // Точка
- struct point
- {
- float x, y;
- point() : x(0), y(0) {}
- point(float x, float y) : x(x), y(y) {}
- };
- // Absolute (модуль числа)
- template <typename T>
- inline T abs(T const val)
- {
- return val < 0 ? -val : val;
- }
- // Compare (сравнение чисел с плавающей точкой)
- bool cmp(float const a, float const b)
- {
- return abs(a - b) < 0.000001;
- }
- // Length (вычисление расстояния между точками)
- float len(point const &p1, point const &p2)
- {
- float x = p1.x - p2.x,
- y = p1.y - p2.y;
- return sqrt(x*x + y*y);
- }
- }
- int main()
- {
- int M;
- std::cin >> M;
- // Проврка на корректность данных
- if ((M % 2) || (M < 8))
- {
- std::cerr << "Неправильное число чисел";
- return -1;
- }
- M /= 2;
- helper::point *p = new helper::point[M];
- // Чтение точек
- for (int i = 0; i < M; i++)
- std::cin >> p[i].x >> p[i].y;
- // Перебор
- for (int p1 = 0; p1 < M - 3; p1++)
- for (int p2 = p1 + 1; p2 < M - 2; p2++)
- for (int p3 = p2 + 1; p3 < M - 1; p3++)
- for (int p4 = p3 + 1; p4 < M; p4++)
- {
- float /*Стороны*/ a1 = helper::len(p[p1], p[p2]), a2 = helper::len(p[p2], p[p3]), a3 = helper::len(p[p3], p[p4]), a4 = helper::len(p[p4], p[p1]),
- /*Диагонали*/ diag1 = helper::len(p[p1], p[p3]), diag2 = helper::len(p[p2], p[p4]);
- if (
- helper::cmp(a1, a2) && helper::cmp(a2, a3) && helper::cmp(a3, a4) && helper::cmp(a4, a1) && /* Сравнение сторон */
- helper::cmp(diag1, diag2) /* и диагоналей */
- )
- // Вывод
- std::cout << p1 << ' ' << p2 << ' ' << p3 << ' ' << p4 << std::endl;
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement