#include <bits/stdc++.h> using namespace std; vector<int> G[105]; vector<int> ans[105]; int main() { ios_base::sync_with_stdio(0); int k; cin>>k; int p=0; while(k>=(1<<(p+1)))p++; int cnt=1; p--; if(p==-1) { cnt++; G[cnt-1].push_back(cnt); } while(p>=0) { cnt++; G[cnt-1].push_back(cnt); cnt++; G[cnt-1].push_back(cnt); G[cnt-2].push_back(cnt); if((k&(1<<p))!=0) { cnt++; G[cnt-1].push_back(cnt); G[1].push_back(cnt); } p--; } for(int i=1;i<=cnt;i++) { for(int u:G[i])ans[cnt+1-u].push_back(cnt+1-i); } for(int i=1;i<=cnt;i++) { while(ans[i].size()<2)ans[i].push_back(-1); } cout<<cnt<<endl; for(int i=1;i<=cnt;i++)cout<<ans[i][0]<<" "<<ans[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 | #include <bits/stdc++.h> using namespace std; vector<int> G[105]; vector<int> ans[105]; int main() { ios_base::sync_with_stdio(0); int k; cin>>k; int p=0; while(k>=(1<<(p+1)))p++; int cnt=1; p--; if(p==-1) { cnt++; G[cnt-1].push_back(cnt); } while(p>=0) { cnt++; G[cnt-1].push_back(cnt); cnt++; G[cnt-1].push_back(cnt); G[cnt-2].push_back(cnt); if((k&(1<<p))!=0) { cnt++; G[cnt-1].push_back(cnt); G[1].push_back(cnt); } p--; } for(int i=1;i<=cnt;i++) { for(int u:G[i])ans[cnt+1-u].push_back(cnt+1-i); } for(int i=1;i<=cnt;i++) { while(ans[i].size()<2)ans[i].push_back(-1); } cout<<cnt<<endl; for(int i=1;i<=cnt;i++)cout<<ans[i][0]<<" "<<ans[i][1]<<endl; } |