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