#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; } |
English