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