#include<bits/stdc++.h>
using namespace std;
int n,x,i,dl,position,jedynki,k;
int tab[200][2];
bool poz[50];
int main ()
{
ios_base::sync_with_stdio(false);
cin>>k;
position=k;
while (position>0)
{
dl++;
if (position%2==1)
{
poz[dl]=true;
jedynki++;
}
position/=2;
}
//cout<<"jedynki="<<jedynki<<'\n';
//cout<<"dl="<<dl<<'\n';
if (k==1)
{
tab[1][0]=2;
tab[1][1]=-1;
x=2;
}
else
{
tab[1][0]=2;
tab[2][0]=3;
tab[2][1]=4;
x=3;
for (i=3;i<=dl;i++)
{
tab[x][0]=x+2;
tab[x][1]=x+3;
tab[x+1][0]=x+2;
tab[x+1][1]=x+3;
x+=2;
}
x+=2;
tab[1][1]=x;
//cout<<"x="<<x<<'\n';
position=dl-1;
while (poz[position]==false && position>0)
{
position--;
}
if (poz[position]==true)
{
tab[x][0]=x+1;
tab[x][1]=x+2;
tab[x+1][0]=2*(dl-position)+1;
x++;
position--;
}
while (position>0)
{
while (poz[position]==false && position>0)
{
position--;
}
if (position<=0)
{
break;
}
if (tab[x][1]==0)
{
tab[x][1]=2*(dl-position)+1;
}
else
{
tab[x+1][0]=x+2;
tab[x+1][1]=x+3;
x+=2;
tab[x][0]=2*(dl-position)+1;
}
position--;
}
x+=2;
tab[2*dl][0]=x;
tab[2*dl-1][0]=x;
}
cout<<x<<'\n';
for (i=1;i<=x;i++)
{
if (tab[i][0]==0)
{
tab[i][0]=-1;
}
if (tab[i][1]==0)
{
tab[i][1]=-1;
}
cout<<tab[i][0]<<" "<<tab[i][1]<<'\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 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 | #include<bits/stdc++.h> using namespace std; int n,x,i,dl,position,jedynki,k; int tab[200][2]; bool poz[50]; int main () { ios_base::sync_with_stdio(false); cin>>k; position=k; while (position>0) { dl++; if (position%2==1) { poz[dl]=true; jedynki++; } position/=2; } //cout<<"jedynki="<<jedynki<<'\n'; //cout<<"dl="<<dl<<'\n'; if (k==1) { tab[1][0]=2; tab[1][1]=-1; x=2; } else { tab[1][0]=2; tab[2][0]=3; tab[2][1]=4; x=3; for (i=3;i<=dl;i++) { tab[x][0]=x+2; tab[x][1]=x+3; tab[x+1][0]=x+2; tab[x+1][1]=x+3; x+=2; } x+=2; tab[1][1]=x; //cout<<"x="<<x<<'\n'; position=dl-1; while (poz[position]==false && position>0) { position--; } if (poz[position]==true) { tab[x][0]=x+1; tab[x][1]=x+2; tab[x+1][0]=2*(dl-position)+1; x++; position--; } while (position>0) { while (poz[position]==false && position>0) { position--; } if (position<=0) { break; } if (tab[x][1]==0) { tab[x][1]=2*(dl-position)+1; } else { tab[x+1][0]=x+2; tab[x+1][1]=x+3; x+=2; tab[x][0]=2*(dl-position)+1; } position--; } x+=2; tab[2*dl][0]=x; tab[2*dl-1][0]=x; } cout<<x<<'\n'; for (i=1;i<=x;i++) { if (tab[i][0]==0) { tab[i][0]=-1; } if (tab[i][1]==0) { tab[i][1]=-1; } cout<<tab[i][0]<<" "<<tab[i][1]<<'\n'; } return 0; } |
English