1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
|
#include <iostream> // cin, cout
#include <cmath> // sqrt
struct Point {
double x;
double y;
};
double calcDistance(Point a, Point b) {
return sqrt((a.x - b.x) * (a.x - b.x) + (a.y - b.y) * (a.y - b.y));
}
Point cinPoint() {
Point temp;
std::cin >> temp.x >> temp.y;
return temp;
}
struct Triangle {
Point A;
Point B;
Point C;
double Area;
};
double calcArea(Triangle tri) {
double a = calcDistance(tri.B, tri.C);
double b = calcDistance(tri.A, tri.C);
double c = calcDistance(tri.A, tri.B);
double p = (a + b + c) / 2;
return sqrt(p*(p-a)*(p-b)*(p-c)); // Heron's formula
}
Triangle createTriangle(Point A, Point B, Point C) {
return { A, B, C, calcArea({A, B, C}) };
}
Triangle cinTriangle() {
Point tempA = cinPoint(),
tempB = cinPoint(),
tempC = cinPoint();
return createTriangle(tempA, tempB, tempC);
}
void coutTriangle(Triangle tri) {
std::cout << "(" << tri.Area << ")" << std::endl;
}
int cmpByArea(Triangle tri1, Triangle tri2) {
return (tri1.Area > tri2.Area) ? 1 : ((tri1.Area < tri2.Area) ? -1 : 0);
}
void sortTriangleArr(Triangle* triangles, int N, int (compare)(Triangle, Triangle)) {
int indOfSmallest = 0;
for (int i = 0; i < N - 1; i++, indOfSmallest = i) {
for (int j = i + 1; j < N; j++) {
if (compare(triangles[j], triangles[indOfSmallest]) < 0)
indOfSmallest = j;
}
Triangle temp = triangles[i];
triangles[i] = triangles[indOfSmallest];
triangles[indOfSmallest] = temp;
}
}
int main() {
int N;
std::cin >> N;
Triangle* triangles = new Triangle[N];
for (int i = 0; i < N; i++)
triangles[i] = cinTriangle();
sortTriangleArr(triangles, N, cmpByArea);
for (int i = 0; i < N; i++)
coutTriangle(triangles[i]);
delete[] triangles;
};
|