//Wiktor Kotala #include <bits/stdc++.h> #define f first #define s second #define add push_back using namespace std; typedef long long ll; typedef pair<int,int> pint; typedef pair<ll,ll> pll; vector<int> V; queue<int> odp; int main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n; cin >> n; int zapalonych = 0; unsigned int i=0; while(zapalonych < n){ zapalonych += __builtin_popcount(i);\ V.add(zapalonych); i++; } vector<int>::iterator koniec = V.end(); while(n){ koniec = lower_bound(V.begin(), V.end(), n); i = koniec-V.begin(); odp.push(i); n -= __builtin_popcount(i); } cout << odp.size() << '\n'; while(odp.size()){ cout << odp.front() << ' '; odp.pop(); } 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 | //Wiktor Kotala #include <bits/stdc++.h> #define f first #define s second #define add push_back using namespace std; typedef long long ll; typedef pair<int,int> pint; typedef pair<ll,ll> pll; vector<int> V; queue<int> odp; int main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n; cin >> n; int zapalonych = 0; unsigned int i=0; while(zapalonych < n){ zapalonych += __builtin_popcount(i);\ V.add(zapalonych); i++; } vector<int>::iterator koniec = V.end(); while(n){ koniec = lower_bound(V.begin(), V.end(), n); i = koniec-V.begin(); odp.push(i); n -= __builtin_popcount(i); } cout << odp.size() << '\n'; while(odp.size()){ cout << odp.front() << ' '; odp.pop(); } return 0; } |