#include <bits/stdc++.h> using namespace std; int n; int num[10000001]; int main() { scanf("%d", &n); int it = 1; for(int i=1; it <= n; ++i) { int b = __builtin_popcount(i); for(int j=it; j<it+b; j++) { num[j] = i; } it += b; } vector<int> odp; while(n) { odp.push_back(num[n]); n -= __builtin_popcount(num[n]); } printf("%ld\n", odp.size()); for(auto e:odp) printf("%d ", e); printf("\n"); }
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 | #include <bits/stdc++.h> using namespace std; int n; int num[10000001]; int main() { scanf("%d", &n); int it = 1; for(int i=1; it <= n; ++i) { int b = __builtin_popcount(i); for(int j=it; j<it+b; j++) { num[j] = i; } it += b; } vector<int> odp; while(n) { odp.push_back(num[n]); n -= __builtin_popcount(num[n]); } printf("%ld\n", odp.size()); for(auto e:odp) printf("%d ", e); printf("\n"); } |