构造题 70pts 求助qwq
查看原帖
构造题 70pts 求助qwq
564732
TimSwn090306楼主2023/11/27 11:07

思路跟第一篇题解较为相似,但是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;
}
2023/11/27 11:07
加载中...