题解:P16438 [XJTUPC 2026] 共同特征
nanjingxuan2011 · · 题解
题意
求在满足
解法
由于二进制数每位权重倍增,显然一个数是自身 lowbit 的倍数,
小技巧
这道题涉及负数的补码与原数不同和与运算的一些性质。
众所周知,负数的补码等于原数取反后加一。观察以下例子:
原数:101000
补码:011000
可以发现原数 lowbit 后的零取反为一后加上一,会使 lowbit 又变回一。因为其他位都已取反,此时
代码如下:
#include<bits/stdc++.h>
using namespace std;
#define int long long
constexpr int maxn=1e5+10;
int t,x;
signed main()
{
scanf("%lld",&t);
while(t--)
{
scanf("%lld",&x);
int s=x&-x;
printf("%lld\n",s);
}
return 0;
}