题解:P13098 [FJCPC 2025] 构造大师贝贝

我们发现 \(2 ^ {2x}\) 绝对是一个完全平方数。

看见 \(2 ^ {2x}\) 想到了什么?是不是觉得和树状数组里 lowbit\((x)\) 的概念十分相似?它的意思是可以整除 \(x\) 的2的最大整数次幂。所以我们就可以每一次都对 \(n\) 加上 lowbit\((n)\) 直到 \(n\) 为完全平方数为止。

下面是代码:

#include<bits/stdc++.h>
#define int long long
using namespace std;
int t, n;
int lowbit(int x) {
	return x & (-x);
}
queue<int> q;
signed main() {
	ios_base::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	cin >> t;
	while (t --) {
		cin >> n;
		while (true) {
			int tt = sqrt(n);
			if (tt * tt == n) {
				break;
			}
			q.push(lowbit(n));
			n += lowbit(n);
		}
		cout << q.size() << "\n";
		if (q.size()) {
			while (!q.empty()) {
				cout << q.front() << " ";
				q.pop();
			}
			cout << "\n";
		}
	}
	return 0;
}
posted @ 2025-07-07 12:07  xuyifei0302  阅读(5)  评论(0)    收藏  举报