#include <iostream>
#include <cstdio>
#include <vector>
#include <algorithm>
struct point {
int x;
int y;
point (int xx=0, int yy=0) {
x = xx;
y = yy;
}
point operator - (point &other) {
return point(x - other.x, y - other.y);
}
long long len() {
return x * x + y * y;
}
long long operator * (point &other) {
return x * other.y - y * other.x;
}
};
int main() {
std::vector<point> pts;
for (int i = 0; i < 10; ++i) {
y = rand() % 10;
pts.emplace_back(i, y);
pts.emplace_back(i, y);
}
point leftmost = point(0, 0);
// ============== Удалить все повторения =============================
pts.resize(std::unique(pts.begin(), pts.end(), [](point &a, point b) {
return a.x == b.x && a.y == b.y;
}) - pts.begin());
// ===================== Отсортировать по полярному углу =============
std::sort(pts.begin(), pts.end(), [leftmost](point &a, point &b) {
return ((a - leftmost) * (b - leftmost) > 0) ||
(((a - leftmost) * (b - leftmost) == 0) && (a.len() < b.len()));
});
return 0;
}