#include <iostream> #include <vector> #include <algorithm> #include <utility> #include <numeric> typedef std::pair<int64_t,int64_t> Przedzial; int64_t sprawdz(int64_t szkola, int64_t najblizej, int64_t sprawdzany) { if (std::abs(szkola-sprawdzany) < std::abs(szkola-najblizej) ) { return sprawdzany; } if (std::abs(szkola-sprawdzany) == std::abs(szkola-najblizej) && sprawdzany < najblizej) { return sprawdzany; } return najblizej; } int main() { int64_t budynkow; int przedzialow; int64_t szkola; std::cin >> budynkow >> przedzialow >> szkola; std::vector<Przedzial> przedzialy(przedzialow); for (int i = 0; i < przedzialow; ++i) { std::cin >> przedzialy[i].first >> przedzialy[i].second; } std::sort(przedzialy.begin(), przedzialy.end()); int64_t najblizej = -budynkow * 2; for (int i = 0; i < przedzialow; ++i) { if (i == 0 && 1 < przedzialy[i].first) { najblizej = sprawdz(szkola, najblizej, przedzialy[i].first - 1); } if (i == przedzialow-1 && przedzialy[i].second < budynkow) { najblizej = sprawdz(szkola, najblizej, przedzialy[i].second + 1); } if (0 < i && przedzialy[i-1].second + 1 < przedzialy[i].first) { najblizej = sprawdz(szkola, najblizej, przedzialy[i].first - 1); } if (i < przedzialow-1 && przedzialy[i].second + 1 < przedzialy[i+1].first) { najblizej = sprawdz(szkola, najblizej, przedzialy[i].second + 1); } } std::cout << najblizej << std::endl; }
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 | #include <iostream> #include <vector> #include <algorithm> #include <utility> #include <numeric> typedef std::pair<int64_t,int64_t> Przedzial; int64_t sprawdz(int64_t szkola, int64_t najblizej, int64_t sprawdzany) { if (std::abs(szkola-sprawdzany) < std::abs(szkola-najblizej) ) { return sprawdzany; } if (std::abs(szkola-sprawdzany) == std::abs(szkola-najblizej) && sprawdzany < najblizej) { return sprawdzany; } return najblizej; } int main() { int64_t budynkow; int przedzialow; int64_t szkola; std::cin >> budynkow >> przedzialow >> szkola; std::vector<Przedzial> przedzialy(przedzialow); for (int i = 0; i < przedzialow; ++i) { std::cin >> przedzialy[i].first >> przedzialy[i].second; } std::sort(przedzialy.begin(), przedzialy.end()); int64_t najblizej = -budynkow * 2; for (int i = 0; i < przedzialow; ++i) { if (i == 0 && 1 < przedzialy[i].first) { najblizej = sprawdz(szkola, najblizej, przedzialy[i].first - 1); } if (i == przedzialow-1 && przedzialy[i].second < budynkow) { najblizej = sprawdz(szkola, najblizej, przedzialy[i].second + 1); } if (0 < i && przedzialy[i-1].second + 1 < przedzialy[i].first) { najblizej = sprawdz(szkola, najblizej, przedzialy[i].first - 1); } if (i < przedzialow-1 && przedzialy[i].second + 1 < przedzialy[i+1].first) { najblizej = sprawdz(szkola, najblizej, przedzialy[i].second + 1); } } std::cout << najblizej << std::endl; } |