#include #include #include typedef long double ld; using namespace std; bool isclose(ld a, ld b) { return abs(a - b) < 1e-19l; } ld dist(pair p1, pair p2) { return sqrt(pow(p2.first - p1.first, 2) + pow(p2.second - p1.second, 2)); } bool is_parallel(pair p1, pair p2, pair p3, pair p4) { return (p1.second == p2.second && p3.second == p4.second) || (p1.second != p2.second && p3.second != p4.second && isclose( (p1.first - p2.first) / (p1.second - p2.second), (p4.first - p3.first) / (p4.second - p3.second))); } int main() { vector> points; for (int i = 0; i < 4; i++) { int x, y; cin >> x >> y; points.push_back(make_pair(x, y)); } vector sides; for (int i = 0; i < 4; i++) { sides.push_back(dist(points[i], points[(i + 1) % 4])); } bool equal_diagonals = dist(points[0], points[2]) == dist(points[1], points[3]); if (sides[0] == sides[1] && sides[1] == sides[2] && sides[2] == sides[3] && sides[3] == sides[0]) { cout << (equal_diagonals ? "square" : "rhombus") << endl; return 0; } if (sides[0] == sides[2] && sides[1] == sides[3]) { cout << (equal_diagonals ? "rectangle" : "parallelogram") << endl; return 0; } if ((isclose(sides[0], sides[1]) && isclose(sides[2], sides[3])) || (isclose(sides[1], sides[2]) && isclose(sides[3], sides[0]))) { cout << "kite" << endl; return 0; } cout << (is_parallel(points[0], points[1], points[2], points[3]) || is_parallel(points[1], points[2], points[3], points[0]) ? "trapezium" : "none") << endl; return 0; }