#include <iostream>
#include <vector>
#include <cmath>
#include <algorithm>
struct Triangle
{
double a, b, c;
double perimeter, area;
Triangle(double in_a, double in_b, double in_c, double in_p, double in_area) : a(in_a), b(in_b),
c(in_c), perimeter(in_p), area(in_area) {};
};
class Trinagles
{
std::vector<Triangle> triangles;
public:
void add( double a, double b, double c )
{
if (a >= b + c || b >= a + c || c >= a + b || a <= 0 || b <= 0 || c <= 0)
return;
int p = (a + b + c) / 2;
triangles.push_back(Triangle(a, b, c, a + b + c, sqrt(p * (p - a) * (p - b) * (p - c))));
}
void ans()
{
sort (triangles.begin(), triangles.end(), [](Triangle a, Triangle b) {return a.perimeter < b.perimeter;});
std::cout << "Perimeters: ";
for (int i = 0; i < triangles.size(); i++)
std::cout << triangles[i].perimeter << " ";
std::cout << std::endl;
std::cout << "Areas: ";
sort (triangles.begin(), triangles.end(), [](Triangle a, Triangle b) {return a.area > b.area;});
for (int i = 0; i < triangles.size(); i++)
std::cout << triangles[i].area << " ";
}
};
int main() {
Trinagles t;
t.add(3, 5, 5);
t.add(5, 6, 7);
t.add(6, 7, 8);
t.ans();
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8Y21hdGg+CiNpbmNsdWRlIDxhbGdvcml0aG0+CgpzdHJ1Y3QgVHJpYW5nbGUKewoJZG91YmxlIGEsIGIsIGM7Cglkb3VibGUgcGVyaW1ldGVyLCBhcmVhOwoJCglUcmlhbmdsZShkb3VibGUgaW5fYSwgZG91YmxlIGluX2IsIGRvdWJsZSBpbl9jLCBkb3VibGUgaW5fcCwgZG91YmxlIGluX2FyZWEpIDogYShpbl9hKSwgYihpbl9iKSwgCgkJYyhpbl9jKSwgcGVyaW1ldGVyKGluX3ApLCBhcmVhKGluX2FyZWEpIHt9Owp9OwoKY2xhc3MgVHJpbmFnbGVzCnsKCXN0ZDo6dmVjdG9yPFRyaWFuZ2xlPiB0cmlhbmdsZXM7CgkKcHVibGljOgoJdm9pZCBhZGQoIGRvdWJsZSBhLCBkb3VibGUgYiwgZG91YmxlIGMgKQoJewoJCWlmIChhID49IGIgKyBjIHx8IGIgPj0gYSArIGMgfHwgYyA+PSBhICsgYiB8fCBhIDw9IDAgfHwgYiA8PSAwIHx8IGMgPD0gMCkKCQkJcmV0dXJuOwoJCQoJCWludCBwID0gKGEgKyBiICsgYykgLyAyOwoJCXRyaWFuZ2xlcy5wdXNoX2JhY2soVHJpYW5nbGUoYSwgYiwgYywgYSArIGIgKyBjLCBzcXJ0KHAgKiAocCAtIGEpICogKHAgLSBiKSAqIChwIC0gYykpKSk7Cgl9CgkKCXZvaWQgYW5zKCkKCXsKCQlzb3J0ICh0cmlhbmdsZXMuYmVnaW4oKSwgdHJpYW5nbGVzLmVuZCgpLCBbXShUcmlhbmdsZSBhLCBUcmlhbmdsZSBiKSB7cmV0dXJuIGEucGVyaW1ldGVyIDwgYi5wZXJpbWV0ZXI7fSk7CgkJc3RkOjpjb3V0IDw8ICJQZXJpbWV0ZXJzOiAiOwoJCWZvciAoaW50IGkgPSAwOyBpIDwgdHJpYW5nbGVzLnNpemUoKTsgaSsrKQoJCQlzdGQ6OmNvdXQgPDwgdHJpYW5nbGVzW2ldLnBlcmltZXRlciA8PCAiICI7CgkJc3RkOjpjb3V0IDw8IHN0ZDo6ZW5kbDsKCQkKCQlzdGQ6OmNvdXQgPDwgIkFyZWFzOiAiOwoJCXNvcnQgKHRyaWFuZ2xlcy5iZWdpbigpLCB0cmlhbmdsZXMuZW5kKCksIFtdKFRyaWFuZ2xlIGEsIFRyaWFuZ2xlIGIpIHtyZXR1cm4gYS5hcmVhID4gYi5hcmVhO30pOwoJCWZvciAoaW50IGkgPSAwOyBpIDwgdHJpYW5nbGVzLnNpemUoKTsgaSsrKQoJCQlzdGQ6OmNvdXQgPDwgdHJpYW5nbGVzW2ldLmFyZWEgPDwgIiAiOwoJfQp9OwoKaW50IG1haW4oKSB7CglUcmluYWdsZXMgdDsKCQoJdC5hZGQoMywgNSwgNSk7Cgl0LmFkZCg1LCA2LCA3KTsKCXQuYWRkKDYsIDcsIDgpOwoJdC5hbnMoKTsKCXJldHVybiAwOwp9