//Author: Piotr Zielinski #include <bits/stdc++.h> using namespace std; typedef long long LL; typedef pair<int, int> PII; const int N = 100; int gSize = 0; vector<int> dp(N); vector<vector<int>> g(N); void gen(int n) { dp[1] = 1; dp[2] = 1; g[2].push_back(1); int nd = 0, i = 2; while(dp[i] < n) { ++i, ++nd; while(dp[i-1] + dp[nd] > n) --nd; dp[i] = dp[i-1] + dp[nd]; g[i].push_back(i-1); g[i].push_back(nd); } gSize = i + 1; } void printG() { cout << gSize - 1 << "\n"; int n = gSize; while(gSize --> 1) { for(auto I : g[gSize]) cout << n - I << " "; for(int i = 2 - g[gSize].size();i > 0;--i) cout << -1 << " "; cout << "\n"; } } int main() { ios::sync_with_stdio(0); cin.tie(nullptr); int n; cin >> n; gen(n); printG(); 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 | //Author: Piotr Zielinski #include <bits/stdc++.h> using namespace std; typedef long long LL; typedef pair<int, int> PII; const int N = 100; int gSize = 0; vector<int> dp(N); vector<vector<int>> g(N); void gen(int n) { dp[1] = 1; dp[2] = 1; g[2].push_back(1); int nd = 0, i = 2; while(dp[i] < n) { ++i, ++nd; while(dp[i-1] + dp[nd] > n) --nd; dp[i] = dp[i-1] + dp[nd]; g[i].push_back(i-1); g[i].push_back(nd); } gSize = i + 1; } void printG() { cout << gSize - 1 << "\n"; int n = gSize; while(gSize --> 1) { for(auto I : g[gSize]) cout << n - I << " "; for(int i = 2 - g[gSize].size();i > 0;--i) cout << -1 << " "; cout << "\n"; } } int main() { ios::sync_with_stdio(0); cin.tie(nullptr); int n; cin >> n; gen(n); printG(); return 0; } |