#include <iostream> #include <vector> //#include <bits/stdc++.h> using namespace std; #define FORE(x, b, e) for(int x = b; x <= (e); ++x) #define FORL(x, b, e) for(int x = b; x < (e); ++x) #define P(x) cout <<#x <<'=' <<(x) <<" "; #define PP cout <<endl; #define Pv(x,a,b) cout << #x<<'=';for(int i=a;i<=b;i++)cout<<' '<<x[i];PP #define Pvv(x,y,a,b) cout <<#x <<#y <<'=';FORE(i,a,b)cout<<' '<<x[y[i]];PP void pr(int a, int b, int c) { cout <<b <<" " <<c << endl; //if(b>0)cout <<a <<"->" <<b<<"; "; if(c>0)cout <<a <<"->" <<c<<"; "; cout<< endl; } int main() { std::ios_base::sync_with_stdio(false); cin.tie(NULL); int n, b=0, B[32]; cin >>n; if(n==1) { cout <<"2\n2 -1\n-1 -1\n"; return 0; } int x=n, p=0; while(x){ //P(x);P(x&1);P(b);PP; if(x&1) { B[++b]=p; } p++; x = x>>1; } p=B[b]; cout << (b+1+2*p) <<endl; for(int i=1; i<b; i++) pr(i,i+1,b+2*(p-B[i])); pr(b,b+1,b+2); n=b+1; for(int i=1; i<p; i++) { pr(n ,n+2,n+3); pr(n+1,n+2,n+3); n+=2; } pr(n ,n+2,-1); pr(n+1,n+2,-1); pr(n+1,-1,-1); //**/Pv(B,1,b); 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 | #include <iostream> #include <vector> //#include <bits/stdc++.h> using namespace std; #define FORE(x, b, e) for(int x = b; x <= (e); ++x) #define FORL(x, b, e) for(int x = b; x < (e); ++x) #define P(x) cout <<#x <<'=' <<(x) <<" "; #define PP cout <<endl; #define Pv(x,a,b) cout << #x<<'=';for(int i=a;i<=b;i++)cout<<' '<<x[i];PP #define Pvv(x,y,a,b) cout <<#x <<#y <<'=';FORE(i,a,b)cout<<' '<<x[y[i]];PP void pr(int a, int b, int c) { cout <<b <<" " <<c << endl; //if(b>0)cout <<a <<"->" <<b<<"; "; if(c>0)cout <<a <<"->" <<c<<"; "; cout<< endl; } int main() { std::ios_base::sync_with_stdio(false); cin.tie(NULL); int n, b=0, B[32]; cin >>n; if(n==1) { cout <<"2\n2 -1\n-1 -1\n"; return 0; } int x=n, p=0; while(x){ //P(x);P(x&1);P(b);PP; if(x&1) { B[++b]=p; } p++; x = x>>1; } p=B[b]; cout << (b+1+2*p) <<endl; for(int i=1; i<b; i++) pr(i,i+1,b+2*(p-B[i])); pr(b,b+1,b+2); n=b+1; for(int i=1; i<p; i++) { pr(n ,n+2,n+3); pr(n+1,n+2,n+3); n+=2; } pr(n ,n+2,-1); pr(n+1,n+2,-1); pr(n+1,-1,-1); //**/Pv(B,1,b); return 0; } |