#include <cstdio> #include <vector> using namespace std; unsigned int k; vector<unsigned int> fib_num; vector<int> idx; void gen_fibo(int a) { fib_num.resize( a+1 ); fib_num[0] = 0; fib_num[1] = 1; for(int i = 2; i <= a; ++i) { fib_num[i] = fib_num[i-1] + fib_num[i-2]; } } void populate_fibo_idx() { unsigned int n; int i; n = k; while (n != 0) { i = 1; while(fib_num[i] <= n) { i++; } idx.push_back(i-1); n -= fib_num[i-1]; } } int main() { scanf("%u", &k); gen_fibo(45); populate_fibo_idx(); { int mov = idx.size()-1; printf("%d\n", idx[0]+mov); for(int i = 1; i <= mov; ++i) { printf("%d %d\n", i+1, idx[0] - idx[i] + 1 + mov); } for(int i = 1+mov; i < idx[0]+mov-1; ++i) { printf("%d %d\n", i+1, i+2); } printf("%d -1\n", idx[0]+mov); 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 | #include <cstdio> #include <vector> using namespace std; unsigned int k; vector<unsigned int> fib_num; vector<int> idx; void gen_fibo(int a) { fib_num.resize( a+1 ); fib_num[0] = 0; fib_num[1] = 1; for(int i = 2; i <= a; ++i) { fib_num[i] = fib_num[i-1] + fib_num[i-2]; } } void populate_fibo_idx() { unsigned int n; int i; n = k; while (n != 0) { i = 1; while(fib_num[i] <= n) { i++; } idx.push_back(i-1); n -= fib_num[i-1]; } } int main() { scanf("%u", &k); gen_fibo(45); populate_fibo_idx(); { int mov = idx.size()-1; printf("%d\n", idx[0]+mov); for(int i = 1; i <= mov; ++i) { printf("%d %d\n", i+1, idx[0] - idx[i] + 1 + mov); } for(int i = 1+mov; i < idx[0]+mov-1; ++i) { printf("%d %d\n", i+1, i+2); } printf("%d -1\n", idx[0]+mov); printf("-1 -1\n"); } return 0; } |