#include <iostream> int krawedzie[101][2]; int main() { std::ios_base::sync_with_stdio(false); std::cin.tie(nullptr); int liczba_sciezek; std::cin >> liczba_sciezek; int liczba_wierzcholkow; for(liczba_wierzcholkow = 2; 1<<(liczba_wierzcholkow-1) <= liczba_sciezek; ++liczba_wierzcholkow) krawedzie[liczba_wierzcholkow<<1][0] = krawedzie[liczba_wierzcholkow<<1|1][0] = (liczba_wierzcholkow-1)<<1, krawedzie[liczba_wierzcholkow<<1][1] = krawedzie[liczba_wierzcholkow<<1|1][1] = (liczba_wierzcholkow-1)<<1|1; liczba_wierzcholkow = (liczba_wierzcholkow-1)<<1|1; for(int roznica = 30, ostatni = 1; liczba_sciezek; --roznica) if(1<<roznica <= liczba_sciezek) { liczba_sciezek -= 1<<roznica; ++liczba_wierzcholkow; krawedzie[ostatni][1] = liczba_wierzcholkow, krawedzie[liczba_wierzcholkow][0] = (roznica+1)<<1; ostatni = liczba_wierzcholkow; } ++liczba_wierzcholkow; krawedzie[2][0] = krawedzie[3][0] = liczba_wierzcholkow; krawedzie[2][1] = krawedzie[3][1] = 0; std::cout << liczba_wierzcholkow << '\n'; for(int i = 1; i <= liczba_wierzcholkow; ++i) std::cout << (krawedzie[i][0] ? krawedzie[i][0] : -1) << ' ' << (krawedzie[i][1] ? krawedzie[i][1] : -1) << '\n'; 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 | #include <iostream> int krawedzie[101][2]; int main() { std::ios_base::sync_with_stdio(false); std::cin.tie(nullptr); int liczba_sciezek; std::cin >> liczba_sciezek; int liczba_wierzcholkow; for(liczba_wierzcholkow = 2; 1<<(liczba_wierzcholkow-1) <= liczba_sciezek; ++liczba_wierzcholkow) krawedzie[liczba_wierzcholkow<<1][0] = krawedzie[liczba_wierzcholkow<<1|1][0] = (liczba_wierzcholkow-1)<<1, krawedzie[liczba_wierzcholkow<<1][1] = krawedzie[liczba_wierzcholkow<<1|1][1] = (liczba_wierzcholkow-1)<<1|1; liczba_wierzcholkow = (liczba_wierzcholkow-1)<<1|1; for(int roznica = 30, ostatni = 1; liczba_sciezek; --roznica) if(1<<roznica <= liczba_sciezek) { liczba_sciezek -= 1<<roznica; ++liczba_wierzcholkow; krawedzie[ostatni][1] = liczba_wierzcholkow, krawedzie[liczba_wierzcholkow][0] = (roznica+1)<<1; ostatni = liczba_wierzcholkow; } ++liczba_wierzcholkow; krawedzie[2][0] = krawedzie[3][0] = liczba_wierzcholkow; krawedzie[2][1] = krawedzie[3][1] = 0; std::cout << liczba_wierzcholkow << '\n'; for(int i = 1; i <= liczba_wierzcholkow; ++i) std::cout << (krawedzie[i][0] ? krawedzie[i][0] : -1) << ' ' << (krawedzie[i][1] ? krawedzie[i][1] : -1) << '\n'; return 0; } |