#include<bits/stdc++.h>
using namespace std;
int tab[1000000]={0,1}, wyn[1000000];
int main()
{
int n, i = 1, j;
cin >> n;
while(tab[i] < n){
i++;
tab[i] = tab[i-1] + __builtin_popcount(i);
}
if(n == tab[i]) {
cout << i << endl;
while(i--) cout << i + 1
<<" ";
return 0;
}
do{
wyn[j] = i;
j++;
n = n - __builtin_popcount(i);
while(tab[i] >= n) i--;
i++;
} while(n > 0);
cout << j << endl;
for(i = 0; i < j; i++) cout << wyn[i] <<" ";
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 | #include<bits/stdc++.h> using namespace std; int tab[1000000]={0,1}, wyn[1000000]; int main() { int n, i = 1, j; cin >> n; while(tab[i] < n){ i++; tab[i] = tab[i-1] + __builtin_popcount(i); } if(n == tab[i]) { cout << i << endl; while(i--) cout << i + 1 <<" "; return 0; } do{ wyn[j] = i; j++; n = n - __builtin_popcount(i); while(tab[i] >= n) i--; i++; } while(n > 0); cout << j << endl; for(i = 0; i < j; i++) cout << wyn[i] <<" "; return 0; } |
English