#include <iostream>
using namespace std;
struct Przedzial
{
unsigned long long l;
unsigned long long r;
};
int main()
{
unsigned long long n_liczba_budynkow, s_adres_szkoly;
unsigned short m_ilosc_zajete_przedzialy;
cin >> n_liczba_budynkow >> m_ilosc_zajete_przedzialy >> s_adres_szkoly;
Przedzial* zajete_przedzialy = new Przedzial[m_ilosc_zajete_przedzialy];
unsigned long long lewy_dom = s_adres_szkoly, prawy_dom = s_adres_szkoly;
for (unsigned short nr = 0; nr < m_ilosc_zajete_przedzialy; nr++)
{
cin >> zajete_przedzialy[nr].l >> zajete_przedzialy[nr].r;
if (s_adres_szkoly >= zajete_przedzialy[nr].l && s_adres_szkoly <= zajete_przedzialy[nr].r)
{
lewy_dom = zajete_przedzialy[nr].l - 1;
prawy_dom = zajete_przedzialy[nr].r + 1;
}
}
bool opracja;
do {
opracja = false;
for (unsigned short nr = 0; nr < m_ilosc_zajete_przedzialy; nr++) {
if (zajete_przedzialy[nr].r == lewy_dom && lewy_dom != 0)
{
lewy_dom = zajete_przedzialy[nr].l - 1;
opracja = true;
}
else if (zajete_przedzialy[nr].l == prawy_dom && prawy_dom != n_liczba_budynkow+1)
{
prawy_dom = zajete_przedzialy[nr].r + 1;
opracja = true;
}
}
} while (opracja);
if (lewy_dom == 0) {
cout << prawy_dom;
}
else if (prawy_dom == n_liczba_budynkow + 1) {
cout << lewy_dom;
}
else {
if (prawy_dom - s_adres_szkoly < s_adres_szkoly - lewy_dom) {
cout << prawy_dom;
}
else {
cout << lewy_dom;
}
}
delete[] zajete_przedzialy;
return 0;
}
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 | #include <iostream> using namespace std; struct Przedzial { unsigned long long l; unsigned long long r; }; int main() { unsigned long long n_liczba_budynkow, s_adres_szkoly; unsigned short m_ilosc_zajete_przedzialy; cin >> n_liczba_budynkow >> m_ilosc_zajete_przedzialy >> s_adres_szkoly; Przedzial* zajete_przedzialy = new Przedzial[m_ilosc_zajete_przedzialy]; unsigned long long lewy_dom = s_adres_szkoly, prawy_dom = s_adres_szkoly; for (unsigned short nr = 0; nr < m_ilosc_zajete_przedzialy; nr++) { cin >> zajete_przedzialy[nr].l >> zajete_przedzialy[nr].r; if (s_adres_szkoly >= zajete_przedzialy[nr].l && s_adres_szkoly <= zajete_przedzialy[nr].r) { lewy_dom = zajete_przedzialy[nr].l - 1; prawy_dom = zajete_przedzialy[nr].r + 1; } } bool opracja; do { opracja = false; for (unsigned short nr = 0; nr < m_ilosc_zajete_przedzialy; nr++) { if (zajete_przedzialy[nr].r == lewy_dom && lewy_dom != 0) { lewy_dom = zajete_przedzialy[nr].l - 1; opracja = true; } else if (zajete_przedzialy[nr].l == prawy_dom && prawy_dom != n_liczba_budynkow+1) { prawy_dom = zajete_przedzialy[nr].r + 1; opracja = true; } } } while (opracja); if (lewy_dom == 0) { cout << prawy_dom; } else if (prawy_dom == n_liczba_budynkow + 1) { cout << lewy_dom; } else { if (prawy_dom - s_adres_szkoly < s_adres_szkoly - lewy_dom) { cout << prawy_dom; } else { cout << lewy_dom; } } delete[] zajete_przedzialy; return 0; } |
English