#include <iostream>
#include <cmath>
using namespace std;
#define n 100
int graf[n][2];
long long iledrug[n];
void printgr();
void printgr2();
int main(){
long long k;
cin >>k;
for(int i=0;i<n-1;i++){
graf[i][0]=-1;
graf[i][1]=i+1;
iledrug[i] =1;
}
graf[n-1][0]=-1;
graf[n-1][1]=-1;
iledrug[n-1]=1;
if (k ==1) {
printgr2();
return 0;
}
long long kwynik = 1;
// graf[n-3][0]=n-1;
// iledrug[n-3]=2;
int ostatniei=2,ostatniej;
kwynik = 1;
for(int i=n-1 -ostatniei;i>=0;i-=2) {
iledrug[i] = 2*iledrug[i+2] ;
graf[i][0] = i+2;
kwynik=kwynik*2;
ostatniei=i;
if(kwynik*2>k) break;
}
ostatniej=ostatniei;
k = k-kwynik;
while (k>0) {
kwynik = 1;
ostatniei +=2;
kwynik= iledrug[ostatniei];
if(k/iledrug[ostatniei] !=0) {
ostatniej-=1;
graf[ostatniej][0] = ostatniei;
// ostatniej=i;
k = k -kwynik;
}
}
printgr2();
return 0;
}
void printgr() {
for(int i=0;i<n;i++)
cout << i << " ->" << graf[i][0] <<" ->" << graf[i][1]<< " ile drug=" << iledrug[i] <<endl;
}
void printgr2() {
cout << n << endl;
for(int i=0;i<n;i++) {
if (graf[i][0]!=-1)
graf[i][0]+=1;
if (graf[i][1]!=-1)
graf[i][1]+=1;
cout << graf[i][0]<<" " << graf[i][1] <<endl;
}
}
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 | #include <iostream> #include <cmath> using namespace std; #define n 100 int graf[n][2]; long long iledrug[n]; void printgr(); void printgr2(); int main(){ long long k; cin >>k; for(int i=0;i<n-1;i++){ graf[i][0]=-1; graf[i][1]=i+1; iledrug[i] =1; } graf[n-1][0]=-1; graf[n-1][1]=-1; iledrug[n-1]=1; if (k ==1) { printgr2(); return 0; } long long kwynik = 1; // graf[n-3][0]=n-1; // iledrug[n-3]=2; int ostatniei=2,ostatniej; kwynik = 1; for(int i=n-1 -ostatniei;i>=0;i-=2) { iledrug[i] = 2*iledrug[i+2] ; graf[i][0] = i+2; kwynik=kwynik*2; ostatniei=i; if(kwynik*2>k) break; } ostatniej=ostatniei; k = k-kwynik; while (k>0) { kwynik = 1; ostatniei +=2; kwynik= iledrug[ostatniei]; if(k/iledrug[ostatniei] !=0) { ostatniej-=1; graf[ostatniej][0] = ostatniei; // ostatniej=i; k = k -kwynik; } } printgr2(); return 0; } void printgr() { for(int i=0;i<n;i++) cout << i << " ->" << graf[i][0] <<" ->" << graf[i][1]<< " ile drug=" << iledrug[i] <<endl; } void printgr2() { cout << n << endl; for(int i=0;i<n;i++) { if (graf[i][0]!=-1) graf[i][0]+=1; if (graf[i][1]!=-1) graf[i][1]+=1; cout << graf[i][0]<<" " << graf[i][1] <<endl; } } |
English