#include <cstdio> int main() { int k; scanf("%d", &k); int bits[32]; int b = 0; int ones = 0; while (k > 0) { bits[b] = k % 2; ones += bits[b]; k /= 2; b++; } //27 //1 1 0 1 1 if (b == 1) { printf("2\n"); printf("2 -1\n"); printf("-1 -1"); return 0; } int n = b - 1 + 2 * b; printf("%d\n", n); //(1 2), (1 b * 2) printf("2 %d\n", b * 2); //(2, 3), (2, 4), (4, 5), (4, 6)... for (int i = 1; i <= b - 2; i++) { printf("%d %d\n", 2 * i + 1, 2 * i + 2); printf("%d %d\n", 2 * i + 2, -1); } //1, 2, 3, ... 2 * (b - 2), 2 *(b-2)+1 // (2 * (b - 2) + 2, n) printf("%d %d\n", n, 2 * (b - 2) + 2 + 1); // (2 * (b - 2) + 2 + 1, n) printf("%d %d\n", n, -1); // (2 * b, int j = 4, l = 2 * b; for (int i = b - 2; i >= 0; --i) { if (i == 0) { if (bits[i]) { printf("%d %d\n", n, -1); } else { printf("%d %d\n", -1, -1); } } else { if (bits[i]) { printf("%d %d\n", j, l + 1); } else { printf("%d %d\n", -1, l + 1); } } l++; j += 2; } printf("-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 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 72 73 74 75 76 77 78 79 | #include <cstdio> int main() { int k; scanf("%d", &k); int bits[32]; int b = 0; int ones = 0; while (k > 0) { bits[b] = k % 2; ones += bits[b]; k /= 2; b++; } //27 //1 1 0 1 1 if (b == 1) { printf("2\n"); printf("2 -1\n"); printf("-1 -1"); return 0; } int n = b - 1 + 2 * b; printf("%d\n", n); //(1 2), (1 b * 2) printf("2 %d\n", b * 2); //(2, 3), (2, 4), (4, 5), (4, 6)... for (int i = 1; i <= b - 2; i++) { printf("%d %d\n", 2 * i + 1, 2 * i + 2); printf("%d %d\n", 2 * i + 2, -1); } //1, 2, 3, ... 2 * (b - 2), 2 *(b-2)+1 // (2 * (b - 2) + 2, n) printf("%d %d\n", n, 2 * (b - 2) + 2 + 1); // (2 * (b - 2) + 2 + 1, n) printf("%d %d\n", n, -1); // (2 * b, int j = 4, l = 2 * b; for (int i = b - 2; i >= 0; --i) { if (i == 0) { if (bits[i]) { printf("%d %d\n", n, -1); } else { printf("%d %d\n", -1, -1); } } else { if (bits[i]) { printf("%d %d\n", j, l + 1); } else { printf("%d %d\n", -1, l + 1); } } l++; j += 2; } printf("-1 -1\n"); return 0; } |