#include <bits/stdc++.h>
using namespace std;
int n, k, m, res[1000001], sum[1000001];
void in()
{
scanf("%d", &n);
}
void calc()
{
int i = 0;
do
{
++i;
sum[i] = sum[i - 1] + __builtin_popcount(i);
}
while(sum[i] < n);
while(n)
{
if(sum[i - 1] < n)
{
res[m++] = i;
n -= sum[i] - sum[i - 1];
}
--i;
}
}
void out()
{
printf("%d\n", m);
for(int i = 0; i < m; ++i)
printf("%d ", res[i]);
}
int main()
{
in();
calc();
out();
}
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 | #include <bits/stdc++.h> using namespace std; int n, k, m, res[1000001], sum[1000001]; void in() { scanf("%d", &n); } void calc() { int i = 0; do { ++i; sum[i] = sum[i - 1] + __builtin_popcount(i); } while(sum[i] < n); while(n) { if(sum[i - 1] < n) { res[m++] = i; n -= sum[i] - sum[i - 1]; } --i; } } void out() { printf("%d\n", m); for(int i = 0; i < m; ++i) printf("%d ", res[i]); } int main() { in(); calc(); out(); } |
English