#include <iostream>
#include <vector>
#include <algorithm>
using std::cin;
using std::cout;
using notes_t = std::vector<size_t>;
using std::find;
int main() {
size_t n;
size_t bits = 1;
notes_t notes = {};
size_t i = 0, j = 0;
cin >> n;
notes.push_back(1);
while (bits < n) {
if (i == j) {
notes.push_back(1);
j = notes.size() - 1;
i = 0;
} else {
notes.push_back(notes[i] + 1);
++i;
}
bits += notes.back();
}
if (bits > n) {
auto overflow = bits - n;
auto it = find(notes.rbegin(), notes.rend(), overflow);
*it = 0;
cout << notes.size() - 1 << '\n';
} else {
cout << notes.size() << '\n';
}
for (size_t k = notes.size(); k >= 1; --k)
if (notes[k - 1] > 0)
cout << k << ' ';
cout << '\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 | #include <iostream> #include <vector> #include <algorithm> using std::cin; using std::cout; using notes_t = std::vector<size_t>; using std::find; int main() { size_t n; size_t bits = 1; notes_t notes = {}; size_t i = 0, j = 0; cin >> n; notes.push_back(1); while (bits < n) { if (i == j) { notes.push_back(1); j = notes.size() - 1; i = 0; } else { notes.push_back(notes[i] + 1); ++i; } bits += notes.back(); } if (bits > n) { auto overflow = bits - n; auto it = find(notes.rbegin(), notes.rend(), overflow); *it = 0; cout << notes.size() - 1 << '\n'; } else { cout << notes.size() << '\n'; } for (size_t k = notes.size(); k >= 1; --k) if (notes[k - 1] > 0) cout << k << ' '; cout << '\n'; return 0; } |
English