#include <bits/stdc++.h> #include <stdio.h> using namespace std; int n, t[1000000],licznik, licz2; int ilosc = 0; int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin>>n; for (int i = 1; i < 1000000; ++i) { licz2 = 0; int k = i; while (k != 0) { if (k % 2 == 1) { ++licz2; } k/=2; } licznik+=licz2; t[i] = licz2; if(licznik>1000100){ break; } } int k = 1; while(true){ n-=t[k]; if(n==1 && t[k+1] == t[k]+1){ t[k] = -1; ++k; ilosc = k-1; break; } if(n==2 && t[k+2] == t[k]+2){ t[k] = -1; t[k+1] = -1; k+=2; ilosc = k-2; break; } if(n==0){ break; } if(n<0){ for(int i=k;i>0;--i){ if(t[i]==abs(n)){ t[i] = -1; n+=t[i]; ilosc = k-1; break; } } break; } ++k; } if(k>ilosc && ilosc >0){ cout<<ilosc<<endl; } else { cout<<k<<endl; } while(k>0){ if(t[k]>0){ cout<<k<<" "; } --k; } }
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 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 | #include <bits/stdc++.h> #include <stdio.h> using namespace std; int n, t[1000000],licznik, licz2; int ilosc = 0; int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin>>n; for (int i = 1; i < 1000000; ++i) { licz2 = 0; int k = i; while (k != 0) { if (k % 2 == 1) { ++licz2; } k/=2; } licznik+=licz2; t[i] = licz2; if(licznik>1000100){ break; } } int k = 1; while(true){ n-=t[k]; if(n==1 && t[k+1] == t[k]+1){ t[k] = -1; ++k; ilosc = k-1; break; } if(n==2 && t[k+2] == t[k]+2){ t[k] = -1; t[k+1] = -1; k+=2; ilosc = k-2; break; } if(n==0){ break; } if(n<0){ for(int i=k;i>0;--i){ if(t[i]==abs(n)){ t[i] = -1; n+=t[i]; ilosc = k-1; break; } } break; } ++k; } if(k>ilosc && ilosc >0){ cout<<ilosc<<endl; } else { cout<<k<<endl; } while(k>0){ if(t[k]>0){ cout<<k<<" "; } --k; } } |