#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"); } |
English