#include <bits/stdc++.h> int k; int max=30; int main() { scanf("%d", &k); if(k==1) { printf("2\n2 -1\n-1 -1\n"); return 0; } for(max; max>=1; max--) if((1<<max)<=k) break; printf("%d\n", 3*max+3); int akt=3; if(k&1) printf("2 %d\n", 3*max+3); else printf("2 -1\n"); for(int i=1; i<=max; i++) { printf("%d %d\n", akt, akt+1); printf("%d -1\n", akt+2); if((i!=1) && (k&(1<<(i-1)))) printf("%d %d\n", akt+2, 3*max+3); else printf("%d -1\n", akt+2); akt+=3; } printf("%d -1\n", 3*max+3); printf("-1 -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 | #include <bits/stdc++.h> int k; int max=30; int main() { scanf("%d", &k); if(k==1) { printf("2\n2 -1\n-1 -1\n"); return 0; } for(max; max>=1; max--) if((1<<max)<=k) break; printf("%d\n", 3*max+3); int akt=3; if(k&1) printf("2 %d\n", 3*max+3); else printf("2 -1\n"); for(int i=1; i<=max; i++) { printf("%d %d\n", akt, akt+1); printf("%d -1\n", akt+2); if((i!=1) && (k&(1<<(i-1)))) printf("%d %d\n", akt+2, 3*max+3); else printf("%d -1\n", akt+2); akt+=3; } printf("%d -1\n", 3*max+3); printf("-1 -1\n"); } |