#include <bits/stdc++.h> #define PB push_back #define ST first #define ND second #define _ ios_base::sync_with_stdio(0); cin.tie(0); //mt19937 rng(chrono::high_resolution_clock::now().time_since_epoch().count()); using namespace std; using ll = long long; using pi = pair<int,int>; using vi = vector<int>; int k; vi rem; vector<pi>ans; int last = 1; int main() {_ cin >> k; if(k == 1) { cout << "2\n2 -1\n-1 -1"; return 0; } else if(k == 2) { cout << "4\n2 3\n4 -1\n4 -1\n-1 -1"; return 0; } else if(k == 3) { cout << "5\n2 3\n4 5\n5 -1\n5 -1\n-1 -1"; return 0; } rem.PB(k); while(k > 1) { k /= 2; rem.PB(k); } reverse(rem.begin(), rem.end()); ans.PB({2, 31}); for(int i = 1; i < 29; ++i) { ans.PB({i + 2, -1}); } ans.PB({-1, -1}); ans.PB({32,33}); last = 32; int add = 2; for(int i = 0; i < (int)rem.size() - 1; ++i) { int x = last; if(i == (int)rem.size() - 2) { ans.PB({x + 2, -1}); ans.PB({x + 2, -1}); ans.PB({-1, -1}); } else { ans.PB({x + 2, x + 3}); ans.PB({x + 2, x + 3}); } if(rem[i + 1] & 1) { ans[add - 1].ND = x; add++; } last += 2; } cout << (int)ans.size() << "\n"; for(auto it : ans) { cout << it.ST << " " << it.ND << "\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 64 65 66 67 68 69 70 71 | #include <bits/stdc++.h> #define PB push_back #define ST first #define ND second #define _ ios_base::sync_with_stdio(0); cin.tie(0); //mt19937 rng(chrono::high_resolution_clock::now().time_since_epoch().count()); using namespace std; using ll = long long; using pi = pair<int,int>; using vi = vector<int>; int k; vi rem; vector<pi>ans; int last = 1; int main() {_ cin >> k; if(k == 1) { cout << "2\n2 -1\n-1 -1"; return 0; } else if(k == 2) { cout << "4\n2 3\n4 -1\n4 -1\n-1 -1"; return 0; } else if(k == 3) { cout << "5\n2 3\n4 5\n5 -1\n5 -1\n-1 -1"; return 0; } rem.PB(k); while(k > 1) { k /= 2; rem.PB(k); } reverse(rem.begin(), rem.end()); ans.PB({2, 31}); for(int i = 1; i < 29; ++i) { ans.PB({i + 2, -1}); } ans.PB({-1, -1}); ans.PB({32,33}); last = 32; int add = 2; for(int i = 0; i < (int)rem.size() - 1; ++i) { int x = last; if(i == (int)rem.size() - 2) { ans.PB({x + 2, -1}); ans.PB({x + 2, -1}); ans.PB({-1, -1}); } else { ans.PB({x + 2, x + 3}); ans.PB({x + 2, x + 3}); } if(rem[i + 1] & 1) { ans[add - 1].ND = x; add++; } last += 2; } cout << (int)ans.size() << "\n"; for(auto it : ans) { cout << it.ST << " " << it.ND << "\n"; } } |