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