#include <bits/stdc++.h> #define fi first #define se second #define pb push_back using namespace std; typedef long long ll; typedef pair<int, int> pii; typedef pair<long long, long long> pll; int k; vector<int> G[109]; void connect(int from, int to) { G[from].pb(to); } int main() { ios_base::sync_with_stdio(0); cin.tie(NULL); cin >> k; int cnt = 0; for (int i = 1; i <= k; i *= 2) cnt++; for (int i = 1; i < cnt; i++) { connect(i, i + 1); } for (int i = 1; i < cnt; i++) { connect(i, cnt + i); connect(cnt + i, i + 1); } connect(cnt, 2 * cnt); int n = 2 * cnt; int pt = cnt + 1; while (k > 1) { if (k % 2 == 1) connect(pt, n); k /= 2; pt++; } cout << n << "\n"; for (int i = 1; i <= n; i++) { if (G[i].size() == 0) { cout << "-1 -1\n"; } else if (G[i].size() == 1) { cout << G[i][0] << " " << -1 << "\n"; } else { cout << G[i][0] << " " << G[i][1] << "\n"; } } }
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 <bits/stdc++.h> #define fi first #define se second #define pb push_back using namespace std; typedef long long ll; typedef pair<int, int> pii; typedef pair<long long, long long> pll; int k; vector<int> G[109]; void connect(int from, int to) { G[from].pb(to); } int main() { ios_base::sync_with_stdio(0); cin.tie(NULL); cin >> k; int cnt = 0; for (int i = 1; i <= k; i *= 2) cnt++; for (int i = 1; i < cnt; i++) { connect(i, i + 1); } for (int i = 1; i < cnt; i++) { connect(i, cnt + i); connect(cnt + i, i + 1); } connect(cnt, 2 * cnt); int n = 2 * cnt; int pt = cnt + 1; while (k > 1) { if (k % 2 == 1) connect(pt, n); k /= 2; pt++; } cout << n << "\n"; for (int i = 1; i <= n; i++) { if (G[i].size() == 0) { cout << "-1 -1\n"; } else if (G[i].size() == 1) { cout << G[i][0] << " " << -1 << "\n"; } else { cout << G[i][0] << " " << G[i][1] << "\n"; } } } |