acwing 803. 区间合并

题目链接
介绍一下\(lowbit\)函数
\(lowbit(x)是x的二进制表达式中最低位的1所对应的值\)
比如\(9\)的二进制为\(1001\)\(8\)的二进制是\(1000\)
\(lowbit(9)\)就是\(2^{0} = 1\)
\(lowbit(8)\)就是\(2^{3} = 8\)
那么这道题就简单了
\(9\)的二进制有几个\(1\),就可以用\(9\)先减去\(lowbit(9)\),再减去\(lowbit(9)\),直到\(9<=0\)为止
中间减了几次就是答案

#include <bits/stdc++.h>
using namespace std;
int n, x, cnt; 
int lowbit(int x) { return x & (-x); }
int main() {
	scanf("%d", &n);
	while (n--) {
		scanf("%d", &x), cnt = 0;
		while (x) x -= lowbit(x), ++cnt;
		printf("%d ", cnt);
	}
	return 0;
}

acwing 803. 区间合并

上一篇:windows下安装Levenshtein


下一篇:【环境部署】windows10 环境使用docker安装elasticsearch并安装elasticsearch-head