#include <bits/stdc++.h> using namespace std; pair<int, int> wynik[100]; int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int k; cin >> k; if (k == 1){ cout << "2\n2 -1\n-1 -1\n"; return 0; } if (k == 2){ cout << "4\n2 3\n4 -1\n4 -1\n-1 -1\n"; return 0; } int n = __lg(k) * 3 + 2, pom = __lg(k); k -= 1 << __lg(k); wynik[n] = {-1, -1}; wynik[n - 2] = {n - 1, n}; wynik[n - 3] = {n, - 1}; if (__lg(k) + 1 == pom){ wynik[n - 1] = {n, -1}; k -= 1 << __lg(k); } else wynik[n - 1] = {-1, -1}; for (int i = n - 4; i; i--){ if (i % 3 == 1) wynik[i] = {i + 1, i + 2}; if (i % 3 == 0){ if (__lg(k) == i / 3 - 1){ wynik[i] = {i + 1, n}; k -= 1 << __lg(k); } else wynik[i] = {i + 1, -1}; } if (i % 3 == 2) wynik[i] = {i + 2, -1}; } cout << n << "\n"; for (int i = 1; i <= n; i++) cout << wynik[i].first << " " << wynik[i].second << "\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 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 | #include <bits/stdc++.h> using namespace std; pair<int, int> wynik[100]; int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int k; cin >> k; if (k == 1){ cout << "2\n2 -1\n-1 -1\n"; return 0; } if (k == 2){ cout << "4\n2 3\n4 -1\n4 -1\n-1 -1\n"; return 0; } int n = __lg(k) * 3 + 2, pom = __lg(k); k -= 1 << __lg(k); wynik[n] = {-1, -1}; wynik[n - 2] = {n - 1, n}; wynik[n - 3] = {n, - 1}; if (__lg(k) + 1 == pom){ wynik[n - 1] = {n, -1}; k -= 1 << __lg(k); } else wynik[n - 1] = {-1, -1}; for (int i = n - 4; i; i--){ if (i % 3 == 1) wynik[i] = {i + 1, i + 2}; if (i % 3 == 0){ if (__lg(k) == i / 3 - 1){ wynik[i] = {i + 1, n}; k -= 1 << __lg(k); } else wynik[i] = {i + 1, -1}; } if (i % 3 == 2) wynik[i] = {i + 2, -1}; } cout << n << "\n"; for (int i = 1; i <= n; i++) cout << wynik[i].first << " " << wynik[i].second << "\n"; return 0; } |