#include<bits/stdc++.h>
using namespace std;
int n;
vector<int>liczba;
int wyznacz(int l){
int ans = 0;
while(l){
if(l % 2) ans++;
l /= 2;
}
return ans;
}
int main(){
scanf("%d", &n);
int idx = 1;
while(n){
int waga = wyznacz(idx);
while(n - waga < 0){
n += wyznacz(liczba.back());
liczba.pop_back();
}
n -= waga;
liczba.push_back(idx++);
}
printf("%d\n", liczba.size());
for(int i = liczba.size() - 1; i >= 0; i--)
printf("%d ", liczba[i]);
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 31 32 33 34 35 36 37 | #include<bits/stdc++.h> using namespace std; int n; vector<int>liczba; int wyznacz(int l){ int ans = 0; while(l){ if(l % 2) ans++; l /= 2; } return ans; } int main(){ scanf("%d", &n); int idx = 1; while(n){ int waga = wyznacz(idx); while(n - waga < 0){ n += wyznacz(liczba.back()); liczba.pop_back(); } n -= waga; liczba.push_back(idx++); } printf("%d\n", liczba.size()); for(int i = liczba.size() - 1; i >= 0; i--) printf("%d ", liczba[i]); printf("\n"); } |
English