#include <iostream>
#include <bits/stdc++.h>
int suma_bitow(int n) { // ostatecznie nieużywane, lmao xD
int count = 0;
while (n) {
count += n & 1;
n >>= 1;
}
return count;
}
int main() {
std::ios_base::sync_with_stdio(false);
std::cin.tie(NULL);
int sumy_bitow[200000];
int n;
int i = 1;
int suma = 0;
std::cin>>n;
sumy_bitow[0] = 0;
while (suma < n) {
if (i % 2 == 0) {
sumy_bitow[i] = sumy_bitow[i / 2];
}
else {
sumy_bitow[i] = sumy_bitow[i - 1] + 1;
}
suma += sumy_bitow[i];
i++;
}
//std::cout<<"Mam sume bitow wieksza/rowna od n: "<<suma<<"\n";
int najwyzsza_wliczana = i - 1;
int liczba_liczb = i - 1;
for (int k = najwyzsza_wliczana; (k > 0) && (suma > n); k --) {
if (suma - sumy_bitow[k] >= n) {
suma = suma - sumy_bitow[k];
sumy_bitow[k] = 0; // będę printować niezerowe
liczba_liczb --;
}
}
std::cout<<liczba_liczb<<"\n";
// suma >= n
for (int k = najwyzsza_wliczana; k > 0; k --) {
if (sumy_bitow[k] != 0) {
std::cout<<k<<" ";
}
}
std::cout<<"\n";
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 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | #include <iostream> #include <bits/stdc++.h> int suma_bitow(int n) { // ostatecznie nieużywane, lmao xD int count = 0; while (n) { count += n & 1; n >>= 1; } return count; } int main() { std::ios_base::sync_with_stdio(false); std::cin.tie(NULL); int sumy_bitow[200000]; int n; int i = 1; int suma = 0; std::cin>>n; sumy_bitow[0] = 0; while (suma < n) { if (i % 2 == 0) { sumy_bitow[i] = sumy_bitow[i / 2]; } else { sumy_bitow[i] = sumy_bitow[i - 1] + 1; } suma += sumy_bitow[i]; i++; } //std::cout<<"Mam sume bitow wieksza/rowna od n: "<<suma<<"\n"; int najwyzsza_wliczana = i - 1; int liczba_liczb = i - 1; for (int k = najwyzsza_wliczana; (k > 0) && (suma > n); k --) { if (suma - sumy_bitow[k] >= n) { suma = suma - sumy_bitow[k]; sumy_bitow[k] = 0; // będę printować niezerowe liczba_liczb --; } } std::cout<<liczba_liczb<<"\n"; // suma >= n for (int k = najwyzsza_wliczana; k > 0; k --) { if (sumy_bitow[k] != 0) { std::cout<<k<<" "; } } std::cout<<"\n"; return 0; } |
English