题解: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;
}
本文来自博客园,作者:xuyifei0302,转载请注明原文链接:https://www.cnblogs.com/xuyifei0302/articles/18970302

浙公网安备 33010602011771号