#include <bits/stdc++.h> using namespace std; int licz_bity(int n) { int licz = 0; while (n) { n = n & (n - 1); licz++; } return licz; } int main() { //int operacje=0; //ios_base::sync_with_stdio(0); //cin.tie(0); //cout.tie(0); vector< pair<int,int> >bity(2000000); for(int i = 0;i<2000000;i++) { bity[i].first=licz_bity(i); bity[i].second=i; } /* for(int i = 0;i<10;i++) { cout<<bity[i].second<<" "<<bity[i].first<<endl; } */ int n; cin>>n; //vector< pair<int,int> >vec(0); int j,i; //int prze=0; int brak=n; for(i = 1;i<=n;i*=2)//tu zmienic i dopasowac liczby { //cout<<"i: "<<i<<"\n"; for(j = 0;j<i;j++) { //cout<<"i+j: "<<j+i<<"\n"; //if(brak-bity[i+j].first>=0) //{ //0 //vec.push_back(bity[i+j]); brak-=bity[i+j].first; //operacje++; //} } /* if(vec[i+j-1]!=bity[i+j-1]) { //vec.push_back(bity[i+j-1]); prze++; } */ } /* cout<<brak<<endl; for(int x = 0;x<20;x++) { cout<<vec[x].second<<" "<<vec[x].first<<endl; } */ i--; //cout<<"sprawdzanie: \n"; //cout<<bity[i].second<<endl<<bity[i].first<<endl; while(brak<0) { if(brak+bity[i].first<=0) { brak+=bity[i].first; bity[i]=make_pair(0,0); } i--; } /* //cout<<brak<<endl; cout<<"bity: \n"; for(int x = 0;x<20;x++) { cout<<bity[x].second<<" "<<bity[x].first<<endl; } */ int odp=0; brak=0; for(int iter = 0;iter<=n;iter++) { if(brak + bity[iter].first<=n && bity[iter]!=make_pair(0,0)) { odp++; brak+=bity[iter].first; } } //cout<<brak<<endl; cout<<odp<<"\n"; for(int iter = n;iter>=0;iter--) { if(bity[iter]!=make_pair(0,0)) { cout<<bity[iter].second<<" "; } } 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 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 | #include <bits/stdc++.h> using namespace std; int licz_bity(int n) { int licz = 0; while (n) { n = n & (n - 1); licz++; } return licz; } int main() { //int operacje=0; //ios_base::sync_with_stdio(0); //cin.tie(0); //cout.tie(0); vector< pair<int,int> >bity(2000000); for(int i = 0;i<2000000;i++) { bity[i].first=licz_bity(i); bity[i].second=i; } /* for(int i = 0;i<10;i++) { cout<<bity[i].second<<" "<<bity[i].first<<endl; } */ int n; cin>>n; //vector< pair<int,int> >vec(0); int j,i; //int prze=0; int brak=n; for(i = 1;i<=n;i*=2)//tu zmienic i dopasowac liczby { //cout<<"i: "<<i<<"\n"; for(j = 0;j<i;j++) { //cout<<"i+j: "<<j+i<<"\n"; //if(brak-bity[i+j].first>=0) //{ //0 //vec.push_back(bity[i+j]); brak-=bity[i+j].first; //operacje++; //} } /* if(vec[i+j-1]!=bity[i+j-1]) { //vec.push_back(bity[i+j-1]); prze++; } */ } /* cout<<brak<<endl; for(int x = 0;x<20;x++) { cout<<vec[x].second<<" "<<vec[x].first<<endl; } */ i--; //cout<<"sprawdzanie: \n"; //cout<<bity[i].second<<endl<<bity[i].first<<endl; while(brak<0) { if(brak+bity[i].first<=0) { brak+=bity[i].first; bity[i]=make_pair(0,0); } i--; } /* //cout<<brak<<endl; cout<<"bity: \n"; for(int x = 0;x<20;x++) { cout<<bity[x].second<<" "<<bity[x].first<<endl; } */ int odp=0; brak=0; for(int iter = 0;iter<=n;iter++) { if(brak + bity[iter].first<=n && bity[iter]!=make_pair(0,0)) { odp++; brak+=bity[iter].first; } } //cout<<brak<<endl; cout<<odp<<"\n"; for(int iter = n;iter>=0;iter--) { if(bity[iter]!=make_pair(0,0)) { cout<<bity[iter].second<<" "; } } return 0; } |