#include <bits/stdc++.h> using namespace std; int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); int sciezki, ile=2, suma; int fib[50] = {1, 1}; vector <int> gdzie; cin >> sciezki; for (ile; ile < 50; ile++) { if (fib[ile - 1] >= sciezki) break; fib[ile] = fib[ile - 1] + fib[ile - 2]; } if (fib[ile - 1] > sciezki) { ile--; suma = sciezki - fib[ile - 1]; for (int i=ile - 2; i > 0; i--) { if (fib[i] <= suma) { // i++ suma -= fib[i]; gdzie.push_back(i); } } } if (gdzie.size()) { if (gdzie.size() == 1) { cout << ile + gdzie.size() - 1 << '\n'; cout << gdzie.size() + 2 << ' ' << 2 << '\n'; cout << ile - gdzie[0] - 1 << ' ' << -1 << '\n'; } else { if (gdzie.size() % 2 == 1) { cout << ile + gdzie.size() - 1 << '\n'; cout << gdzie.size() + 1 << ' ' << 2 << '\n'; for (int i=3; i <= gdzie.size(); i++) { if (i % 2 == 1) cout << i << ' '; else cout << i << '\n'; } } else { cout << ile + gdzie.size() << '\n'; cout << gdzie.size() + 2 << ' ' << 2 << '\n'; for (int i=3; i <= gdzie.size(); i++) { if (i % 2 == 1) cout << i << ' '; else cout << i << '\n'; } } for (int i=0; i < gdzie.size(); i++) { if (i % 2 == 1) cout << ile - gdzie[i] + 3 << ' '; else cout << ile - gdzie[i] + 3 << '\n'; } } for (int i=gdzie.size() + 2; i < ile + gdzie.size(); i++) { cout << i << ' ' << i + 1 << '\n'; } cout << ile + gdzie.size() << ' ' << -1 << '\n'; cout << -1 << ' ' << -1 << '\n'; } else { cout << ile << '\n'; cout << 2 << ' ' << 3 << '\n'; for (int i=3; i < ile; i++) { cout << i << ' ' << i + 1 << '\n'; } cout << ile << ' ' << -1 << '\n'; cout << -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 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 | #include <bits/stdc++.h> using namespace std; int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); int sciezki, ile=2, suma; int fib[50] = {1, 1}; vector <int> gdzie; cin >> sciezki; for (ile; ile < 50; ile++) { if (fib[ile - 1] >= sciezki) break; fib[ile] = fib[ile - 1] + fib[ile - 2]; } if (fib[ile - 1] > sciezki) { ile--; suma = sciezki - fib[ile - 1]; for (int i=ile - 2; i > 0; i--) { if (fib[i] <= suma) { // i++ suma -= fib[i]; gdzie.push_back(i); } } } if (gdzie.size()) { if (gdzie.size() == 1) { cout << ile + gdzie.size() - 1 << '\n'; cout << gdzie.size() + 2 << ' ' << 2 << '\n'; cout << ile - gdzie[0] - 1 << ' ' << -1 << '\n'; } else { if (gdzie.size() % 2 == 1) { cout << ile + gdzie.size() - 1 << '\n'; cout << gdzie.size() + 1 << ' ' << 2 << '\n'; for (int i=3; i <= gdzie.size(); i++) { if (i % 2 == 1) cout << i << ' '; else cout << i << '\n'; } } else { cout << ile + gdzie.size() << '\n'; cout << gdzie.size() + 2 << ' ' << 2 << '\n'; for (int i=3; i <= gdzie.size(); i++) { if (i % 2 == 1) cout << i << ' '; else cout << i << '\n'; } } for (int i=0; i < gdzie.size(); i++) { if (i % 2 == 1) cout << ile - gdzie[i] + 3 << ' '; else cout << ile - gdzie[i] + 3 << '\n'; } } for (int i=gdzie.size() + 2; i < ile + gdzie.size(); i++) { cout << i << ' ' << i + 1 << '\n'; } cout << ile + gdzie.size() << ' ' << -1 << '\n'; cout << -1 << ' ' << -1 << '\n'; } else { cout << ile << '\n'; cout << 2 << ' ' << 3 << '\n'; for (int i=3; i < ile; i++) { cout << i << ' ' << i + 1 << '\n'; } cout << ile << ' ' << -1 << '\n'; cout << -1 << ' ' << -1 << '\n'; } return 0; } |