首页 > Windows开发 > 详细

acwing 803. 区间合并

时间:2021-05-28 19:18:27      阅读:26      评论:0      收藏:0      [点我收藏+]

题目链接
介绍一下\(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. 区间合并

原文:https://www.cnblogs.com/cyyhhyyc/p/14823409.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!