#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; } |