Same binary weight (位运算)
题目描述
输入
输出
样例输入
1717 4 7 12 555555
样例输出
1718 8 11 17 555557
题解:
1717(0110 1011 0101),下一位是 1718(0110 1011 0110)
767(0010 1111 1111),下一位是 895(0011 0111 1111)
348(0001 0101 1100),下一位是 355(0001 0110 0011)
其中不难发现一个规律,从右起的第一个“01”改变为“10”,并且在“01”的后面所有的“1”都移动至最后,事实上,这个就是解题的关键点,那么整个问题求解的核心就转移到这两个子问题:
1. 将右起第一个“01”,改变为“10”
2. 将该“01”后面的所有“1”移动至最后
1 #include <cstdlib> 2 #include <cstring> 3 #include <algorithm> 4 #include <cstdio> 5 #include <cmath> 6 #include <iostream> 7 #include <vector> 8 #include<string> 9 #include<cstring> 10 #include<string.h> 11 #include<set> 12 #include<queue> 13 #include<stack> 14 #include<map> 15 using namespace std; 16 typedef long long LL; 17 18 int main() 19 { 20 int n; 21 while(cin>>n) 22 { 23 int b=n&(-n);// 得到n中最后一个‘1’到最后的值 24 int t=n+b; // 产生进位, 实现‘01’ 变成 ‘10’ 25 int s=t^n; // 得到进位中发生变动的位 26 int k=(s>>2)/b;//先 ‘01’->'10'发生后不要去改变这两位,所以右移2位,然后将‘01’以后的‘1’移动到最后。 27 int n=t|k; // 最后的结果就是t|k 28 cout<<n<<endl; 29 } 30 return 0; 31 }
转载于:https://www.cnblogs.com/wangmengmeng/p/5185483.html
Same binary weight (位运算)相关推荐
- 【LeetCode从零单排】No 191.Number of 1 Bits(考察位运算)
题目 Write a function that takes an unsigned integer and returns the number of '1' bits it has (also k ...
- 进制转换 位运算(包括补码、原码、反码、~0等一些零碎东西一次说清)
我发现网上关于标题上的内容介绍的都很零碎,因此为了方便查找.也为了本人对这一部分的充分理解,就想着写一篇这样的博客(我分成了几个部分,以便查找): 一.进制转换 让我们先来看看各个进制的定义: 十进制 ...
- 0x01.基本算法 — 位运算
目录 一.位运算 二.memset函数 三.移位运算 四.二进制状态压缩 五.成对变换 六.lowbit 七.相关习题 0.AcWing 26. 二进制中1的个数 1.Acwing 89. a^b(快 ...
- C语言中的位运算和逻辑运算
位运算 C语言中的位运算包括与(&),或(|),亦或(^),非(~). 下面的代码包扩了这些基本运算,还有一个两个数的交换(不用第三个数). #include<stdio.h> # ...
- 《算法竞赛进阶指南》打卡-基本算法-AcWing 91. 最短Hamilton路径:位运算、状态压缩dp、dp
文章目录 题目解答 题目链接 题目解答 分析: 状态压缩dp是用二进制数来表示状态. 数据范围n = 20, 那么状态总量就是2202^{20}220个状态. 可以按照以下思路去思考: 哪些点被用过 ...
- 位运算,处理前台多选值
前言: 本周,公司有个需求,需要对前台一个多选值进行存储,实现过程中,想过三种方案,在这里记录下. 方案一(使用多个布尔值): 在最开始,多选值只有两个,就打算用两个布尔值分开存储的,实现和使用都很 ...
- 快速排序算法_基于位运算的快速排序算法
前言 如果你准备看这篇文章,我就当你是懂快速排序算法原理的. 下面是我在2018年10月3日想到的基于二进制位运算对正整数进行的一种快速排序算法,目前的代码只能对正整数进行有效的排序,当然,稍微修改一 ...
- Java从入门到精通08-二进制、位运算、移位运算
Java从入门到精通08-二进制.位运算.移位运算 二进制(Binary)数用0和1两个数字及其组合来表示任何数.进位规则是"逢2进1",数字1在不同的位上代表不同的值,按从右到左 ...
- python 十进制与二进制以及位运算
From: http://blog.sina.com.cn/s/blog_681de30a01013uiw.html 在python2.6以上的版本中自带了将十进制转化为二进制的函数bin(). 看一 ...
最新文章
- 【怎样写代码】工厂三兄弟之抽象工厂模式(二):解决方案
- python可视化:matplotlib学习笔记
- oracle 无效对象,Oracle编译用户无效对象
- 浅谈Java中的final关键字
- Git使用方法——原创
- Lidar SLAM | 地面三维激光雷达测试报告
- Bug只让变量生效一次的思路
- leetcode39. 组合总和
- 第二十一届国际C语言混乱代码大赛结果公布
- [scikit-learn 机器学习] 8. 非线性分类和决策树
- SQL Server 数据加密功能解析
- mysql索引方式_MySQL数据库的索引方式
- php arff文件,python实现txt文件格式转换为arff格式
- pat1057 stack
- 关于Linux进程优先级数字混乱的彻底澄清
- python移动文件(非文件夹)
- 2021年安全员-A证报名考试及安全员-A证考试报名
- Golang 协程 跟Java NIO
- 【报告分享】2021懂车帝经销商直播价值白皮书-懂车帝x巨量算数(附下载)
- python 获取csv的列数_《极限挑战》弹幕及评论情感分析(Python)