#include <cstdio> #include <iostream> #include <vector> using namespace std; int fib[46]={1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,1597,2584,4181,6765,10946,17711,28657,46368,75025,121393,196418,317811,514229,832040,1346269,2178309,3524578,5702887,9227465,14930352,24157817,39088169,63245986,102334155,165580141,267914296,433494437,701408733,1134903170}; pair<int, int> V[1000]; int main() { int k; cin>>k; int l=k; int ind; if (k==1) { cout<<"2\n2 -1\n-1 -1\n"; return 0; } V[1]=make_pair(-1,-1); V[2]=make_pair(1,-1); for (int i=0; i<46; i++) { if (fib[i]>l) { l-=fib[i-1]; ind=i; break; } } for (int i=3; i<=ind; i++) { V[i]=make_pair(i-2,i-1); } int W=ind; while(l>0) { for (int i=0; i<45; i++) { if (fib[i]>l) { l-=fib[i-1]; ind=i-1; break; } } V[W+1]=make_pair(W,ind+1); W++; } cout<<W<<"\n"; for (int i=1; i<=W; i++) { int h=i; if (i==1) h=W; else if (i==W) h=1; int A=V[h].first; int B=V[h].second; if (A==1) A=W; else if (A==W) A=1; if (B==1) B=W; else if (B==W) B=1; cout<<A<<" "<<B<<"\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 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 | #include <cstdio> #include <iostream> #include <vector> using namespace std; int fib[46]={1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,1597,2584,4181,6765,10946,17711,28657,46368,75025,121393,196418,317811,514229,832040,1346269,2178309,3524578,5702887,9227465,14930352,24157817,39088169,63245986,102334155,165580141,267914296,433494437,701408733,1134903170}; pair<int, int> V[1000]; int main() { int k; cin>>k; int l=k; int ind; if (k==1) { cout<<"2\n2 -1\n-1 -1\n"; return 0; } V[1]=make_pair(-1,-1); V[2]=make_pair(1,-1); for (int i=0; i<46; i++) { if (fib[i]>l) { l-=fib[i-1]; ind=i; break; } } for (int i=3; i<=ind; i++) { V[i]=make_pair(i-2,i-1); } int W=ind; while(l>0) { for (int i=0; i<45; i++) { if (fib[i]>l) { l-=fib[i-1]; ind=i-1; break; } } V[W+1]=make_pair(W,ind+1); W++; } cout<<W<<"\n"; for (int i=1; i<=W; i++) { int h=i; if (i==1) h=W; else if (i==W) h=1; int A=V[h].first; int B=V[h].second; if (A==1) A=W; else if (A==W) A=1; if (B==1) B=W; else if (B==W) B=1; cout<<A<<" "<<B<<"\n"; } return 0; } |