思路跟第一篇题解较为相似,但是WA掉了qwq
提交记录
代码:
#include <bits/stdc++.h>
#define pii pair<int,int>
#define mkp(x,y) make_pair(x,y)
#define fir first
#define sec second
#define ll long long
using namespace std;
const int maxn=1e5+5;
int T;
vector <pii> ans;
ll n;
inline void solve(){
scanf("%lld",&n),ans.clear();
if (n==1){
printf("0\n");
return ;
}
ll rest=(1ll<<((ll)ceil(log2(n))))-n;
ll lg=log2(n),lgr=(!rest)?(-1):log2(rest);
if (!(n&(n-1))) lg--;
for (int i=1;i<=lg+2;i++) ans.push_back(mkp(1,i));
for (int i=0;i<=lgr;i++) if (rest&(1ll<<i)) ans[ans.size()-i-2].fir=2;
printf("%d\n",ans.size());
for (int i=0;i<ans.size();i++) printf("%d %d\n",ans[i].fir,ans[i].sec);
}
int main(){
scanf("%lld",&T);
while (T--) solve();
return 0;
}