#include <stdio.h>
#define BITOW 32
int main() {
int k;
scanf("%d", &k);
printf("%d\n", 3*BITOW);
fprintf(stderr, "digraph {\n");
for (int i = 1; i < BITOW; ++i) {
int a = 2*i;
int b = 2*i+1;
int aBit = 2*BITOW - 1 - a;
int bBit = 2*BITOW - 1 - b;
int aZapalony = (aBit >= BITOW) || ((aBit < BITOW-1) && (k & (1 << aBit)));
int bZapalony = (bBit >= BITOW) || ((bBit < BITOW-1) && (k & (1 << bBit)));
//printf("a:%d, aBit:%d, aZap: %d\n", a, aBit, aZapalony);
//printf("b:%d, bBit:%d, bZap: %d\n", b, bBit, bZapalony);
if (aZapalony) {
fprintf(stderr, "%d -> %d\n", i, a);
}
if (bZapalony) {
fprintf(stderr, "%d -> %d\n", i, b);
}
printf("%d %d\n", (aZapalony? a:-1), (bZapalony? b: -1));
}
for (int i = BITOW; i < 2*BITOW-1; ++i) {
int a = i + 1;
int b = i + BITOW+1;
if (a == 2*BITOW) {
a = -1;
}
if (0 < a) {
fprintf(stderr, "%d -> %d\n", i, a);
}
fprintf(stderr, "%d -> %d\n", i, b);
printf("%d %d\n", a, b);
}
fprintf(stderr, "%d -> %d\n", 2*BITOW-1, 3*BITOW);
printf("%d -1\n", 3*BITOW);
for (int i = 2*BITOW; i < 3*BITOW-1; ++i) {
int a = i + 1;
int b = i - BITOW+1;
if (a == 2*BITOW) {
a = -1;
}
if (0 < a) {
fprintf(stderr, "%d -> %d\n", i, a);
}
fprintf(stderr, "%d -> %d\n", i, b);
printf("%d %d\n", a, b);
}
fprintf(stderr, "%d -> %d\n", 3*BITOW-1, 3*BITOW);
printf("%d -1\n", 3*BITOW);
printf("-1 -1\n");
fprintf(stderr, "}\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 <stdio.h> #define BITOW 32 int main() { int k; scanf("%d", &k); printf("%d\n", 3*BITOW); fprintf(stderr, "digraph {\n"); for (int i = 1; i < BITOW; ++i) { int a = 2*i; int b = 2*i+1; int aBit = 2*BITOW - 1 - a; int bBit = 2*BITOW - 1 - b; int aZapalony = (aBit >= BITOW) || ((aBit < BITOW-1) && (k & (1 << aBit))); int bZapalony = (bBit >= BITOW) || ((bBit < BITOW-1) && (k & (1 << bBit))); //printf("a:%d, aBit:%d, aZap: %d\n", a, aBit, aZapalony); //printf("b:%d, bBit:%d, bZap: %d\n", b, bBit, bZapalony); if (aZapalony) { fprintf(stderr, "%d -> %d\n", i, a); } if (bZapalony) { fprintf(stderr, "%d -> %d\n", i, b); } printf("%d %d\n", (aZapalony? a:-1), (bZapalony? b: -1)); } for (int i = BITOW; i < 2*BITOW-1; ++i) { int a = i + 1; int b = i + BITOW+1; if (a == 2*BITOW) { a = -1; } if (0 < a) { fprintf(stderr, "%d -> %d\n", i, a); } fprintf(stderr, "%d -> %d\n", i, b); printf("%d %d\n", a, b); } fprintf(stderr, "%d -> %d\n", 2*BITOW-1, 3*BITOW); printf("%d -1\n", 3*BITOW); for (int i = 2*BITOW; i < 3*BITOW-1; ++i) { int a = i + 1; int b = i - BITOW+1; if (a == 2*BITOW) { a = -1; } if (0 < a) { fprintf(stderr, "%d -> %d\n", i, a); } fprintf(stderr, "%d -> %d\n", i, b); printf("%d %d\n", a, b); } fprintf(stderr, "%d -> %d\n", 3*BITOW-1, 3*BITOW); printf("%d -1\n", 3*BITOW); printf("-1 -1\n"); fprintf(stderr, "}\n"); } |
English