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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
|
#include <iostream>
struct Point
{
int x;
int y;
};
void readPoint(Point& p)
{
std::cin >> p.x >> p.y;
}
void printPoint(const Point& p)
{
std::cout << p.x << " " << p.y;
}
double getDist(const Point& p1, const Point& p2)
{
double dx = p1.x - p2.x;
double dy = p1.y - p2.y;
return sqrt(dx*dx + dy*dy);
}
struct Triangle
{
Point p1;
Point p2;
Point p3;
};
void readTriangle(Triangle& tr)
{
readPoint(tr.p1);
readPoint(tr.p2);
readPoint(tr.p3);
}
void printTriangle(const Triangle& tr)
{
printPoint(tr.p1);
std::cout << " ";
printPoint(tr.p2);
std::cout << " ";
printPoint(tr.p3);
std::cout << std::endl;
}
double getArea(const Triangle& tr)
{
double sideA = getDist(tr.p1, tr.p2);
double sideB = getDist(tr.p2, tr.p3);
double sideC = getDist(tr.p3, tr.p1);
double halfPer = (sideA + sideB + sideC) / 2;
return sqrt(halfPer*(halfPer - sideA)*(halfPer - sideB)*(halfPer - sideC));
}
void swap(int& a, int& b)
{
int temp = a;
a = b;
b = temp;
}
void swap(Triangle& tr1, Triangle& tr2)
{
Triangle temp = tr1;
tr1 = tr2;
tr2 = temp;
}
void selectionSort(int* areas, Triangle* triangles, unsigned size)
{
for (unsigned i = 0; i < size - 1; i++)
{
//findMin
int minElementIndex = i;
for (unsigned j = i + 1; j < size; j++)
{
if (areas[j] < areas[minElementIndex])
minElementIndex = j;
}
if (minElementIndex != i)
{
swap(areas[i], areas[minElementIndex]);
swap(triangles[i], triangles[minElementIndex]);
}
}
}
int* calculateAreas(const Triangle* arr, int n)
{
int* areas = new int[n];
for (int i = 0; i < n; i++)
areas[i] = getArea(arr[i]);
return areas;
}
int main()
{
int n;
std::cin >> n;
Triangle* triangles = new Triangle[n];
for (int i = 0; i < n; i++)
readTriangle(triangles[i]);
int* areas = calculateAreas(triangles,n);
selectionSort(areas, triangles, n);
for (int i = 0; i < n; i++)
printTriangle(triangles[i]);
delete[] triangles, areas;
}
|