Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- Дан массив точек, проверить, есть ли вертикальная прямая, относительно которой эти наборы зеркальны
- std::vector<std::pair<int,int>> points;
- */
- bool is_mirror(std::vector<std::pair<int,int>>& arr) {
- const int n = arr.size();
- if (n == 0) {
- return true;
- }
- int min_x = arr[0].first;
- int max_x = arr[0].first;
- for (const auto& [x, y] : arr) {
- min_x = std::min(min_x, x);
- max_x = std::max(max_x, x);
- }
- int mid_x = (min_x + max_x);
- std::unordered_map<std::pair<int,int>, int> map;
- for (const auto& p : arr) {
- if (p.first * 2 == mid_x) {
- continue;
- } else {
- if (p.first * 2 < mid_x) {
- map[p]++;
- } else {
- map[{mid - p.first, p.second}]--;
- }
- }
- }
- for (auto& [key, value] : map) {
- if (value != 0) {
- return false;
- }
- }
- return true;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement