文章
232
粉丝
165
获赞
377
访问
118.7k
#include <cstdio>
#include <algorithm>
using namespace std;
int main() {
int T;
scanf("%d", &T);
while (T--) {
int L;
unsigned int A, B;
scanf("%d %u %u", &L, &A, &B);
// 构造低 L 位全1的掩码
unsigned int mask;
if (L == 32)
mask = ~0U;
else
mask = (1U << L) - 1;
unsigned int a = A & mask;
unsigned int b = B & mask;
// 计算汉明距离 d = popcount(a ^ b)
unsigned int x = a ^ b;
int d = 0;
for (int i = 0; i < L; ++i)
if (x & (1U << i))
++d;
// 统计 a 中 0 的个数
int cnt0 = 0;
for (int i = 0; i < L; ++i)
if (!(a & (1U << i)))
++cnt0;
int k = min(cnt0, d); // 将最高的 k 个 0 变为 1
int m = d - k; // 再将最低的 m 个 1 变为 0
unsigned int c = 0;
in...
登录后发布评论
暂无评论,来抢沙发