// 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; } |
English