#include <vector>
#include <cstdio>
using namespace std;
vector<vector<int>> ed(111, vector<int>());
void add(int a, int b) {
ed[a].push_back(b);
}
int main(int argc, char** argv) {
int k;
scanf("%d",&k);
int z = 31-__builtin_clz(k);
int n = 3*z + 2;
int prev = 0;
for(int i=0;i<z;i++) {
int u = prev+1;
int v = prev+2;
int dest = prev+3;
add(prev, u);
add(prev, v);
add(u, dest);
add(v, dest);
prev = dest;
}
add(prev, prev+1);
int last = prev+1;
for(int i=0;i<z;i++) {
if(((1<<i)&k)>0) {
add(1+3*i, last);
}
}
printf("%d\n", n);
for(int i=0;i<n;i++) {
vector<int>& v = ed[i];
for(int j=0;j<2;j++) {
if(j > 0) {
printf(" ");
}
if(j < v.size()) {
printf("%d", v[j]+1);
} else {
printf("-1");
}
}
printf("\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 | #include <vector> #include <cstdio> using namespace std; vector<vector<int>> ed(111, vector<int>()); void add(int a, int b) { ed[a].push_back(b); } int main(int argc, char** argv) { int k; scanf("%d",&k); int z = 31-__builtin_clz(k); int n = 3*z + 2; int prev = 0; for(int i=0;i<z;i++) { int u = prev+1; int v = prev+2; int dest = prev+3; add(prev, u); add(prev, v); add(u, dest); add(v, dest); prev = dest; } add(prev, prev+1); int last = prev+1; for(int i=0;i<z;i++) { if(((1<<i)&k)>0) { add(1+3*i, last); } } printf("%d\n", n); for(int i=0;i<n;i++) { vector<int>& v = ed[i]; for(int j=0;j<2;j++) { if(j > 0) { printf(" "); } if(j < v.size()) { printf("%d", v[j]+1); } else { printf("-1"); } } printf("\n"); } return 0; } |
English