// Marcin Knapik #pragma GCC optimize ("O3") #include<bits/stdc++.h> using namespace std; #define FOR(i, n) for (int i = 0; i < n; i++) #define f first #define s second #define pb push_back #define all(s) s.begin(), s.end() #define sz(s) (int)s.size() using ll = long long; using vi = vector<int>; void solve () { int n; cin >> n; vi pref{0}; for(int i = 1; pref.back() < n; i++){ pref.pb(pref.back() + __builtin_popcount(i)); } vi ans {sz(pref) - 1}; n -= __builtin_popcount(ans[0]); while(n > 0){ for(int j = max(1, ans.back() - 100); j < ans.back(); j++){ if(pref[j] >= n){ ans.pb(j); n -= __builtin_popcount(j); break; } } } cout << sz(ans) << '\n'; for(auto & u : ans){ cout << u << ' '; } cout << '\n'; } int main () { ios::sync_with_stdio(0); cin.tie(0); int tests = 1; // cin >> tests; for (int test = 1; test <= tests; test++) { solve(); } 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 | // Marcin Knapik #pragma GCC optimize ("O3") #include<bits/stdc++.h> using namespace std; #define FOR(i, n) for (int i = 0; i < n; i++) #define f first #define s second #define pb push_back #define all(s) s.begin(), s.end() #define sz(s) (int)s.size() using ll = long long; using vi = vector<int>; void solve () { int n; cin >> n; vi pref{0}; for(int i = 1; pref.back() < n; i++){ pref.pb(pref.back() + __builtin_popcount(i)); } vi ans {sz(pref) - 1}; n -= __builtin_popcount(ans[0]); while(n > 0){ for(int j = max(1, ans.back() - 100); j < ans.back(); j++){ if(pref[j] >= n){ ans.pb(j); n -= __builtin_popcount(j); break; } } } cout << sz(ans) << '\n'; for(auto & u : ans){ cout << u << ' '; } cout << '\n'; } int main () { ios::sync_with_stdio(0); cin.tie(0); int tests = 1; // cin >> tests; for (int test = 1; test <= tests; test++) { solve(); } return 0; } |