Same binary weight 位操作 bitset用法 STL
来源:互联网 发布:手表定位软件 编辑:程序博客网 时间:2024/05/16 09:18
Same binary weight
- 描述
The binary weight of a positive integer is the number of 1's in its binary representation.for example,the decmial number 1 has a binary weight of 1,and the decimal number 1717 (which is 11010110101 in binary) has a binary weight of 7.Give a positive integer N,return the smallest integer greater than N that has the same binary weight as N.N will be between 1 and 1000000000,inclusive,the result is guaranteed to fit in a signed 32-bit interget.
- 输入
- The input has multicases and each case contains a integer N.
- 输出
- For each case,output the smallest integer greater than N that has the same binary weight as N.
- 样例输入
17174712555555
- 样例输出
171881117555557
- 来源
- topcoder
- 上传者
- 骆魁永大意是找出n转化为2进制时有相同的1,离得最近的那个;直接用BitSet超时:
#include<iostream>#include<bitset>using namespace std;int main(){int n;while(cin>>n){bitset<32> b(n);//将n转化为二进制int temp1=b.count(),temp2;for(int i=n+1;;++i){bitset<32> c(i);temp2=c.count();//统计1的个数if(temp1==temp2){cout<<i<<endl;break;}}}}
先看看这几个例子:
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”移动至最后
所以直接操作二进制位就ok;#include<iostream>#include<bitset>using namespace std;int main(){int n;while(cin>>n){bitset<32> b(n);//cout<<b<<endl;//for(int k=0;k<32;++k)//cout<<b[k]; //cout<<endl;int i,cont=0;for(i=0;i<32;i++){if(b[i]==1)cont++;if(b[i]==1&&b[i+1]==0){bool t;t=b[i];b[i]=b[i+1];b[i+1]=t;break;}}int j=i-1;for(i=0;i<=j;i++){if(i<cont-1)b[i]=1;elseb[i]=0;}//cout<<b<<endl;cout<<b.to_ulong()<<endl; }}
- Same binary weight 位操作 bitset用法 STL
- NYOJ412 Same binary weight 【bitset位操作】
- Same binary weight bitset(STL)
- Same binary weight(stl 位运算)
- NYOJ 412 Same binary weight(bitset位运算)
- NYOJ 412 Same binary weight(bitset位运算)
- NYIST 412 Same binary weight使用bitset
- nyoj-412-Same binary weight(位运算)
- nyoj412 Same binary weight(bitset类运用)
- NYOJ 题目412 Same binary weight(bitset)
- Same binary weight
- NYOJ - Same binary weight
- acm-Same binary weight
- Same binary weight 数学
- Same binary weight
- Same binary weight
- Same binary weight
- Same binary weight
- 最小二乘法直线拟合
- 关于argument和parameter的分别
- 一次调试c++ bug的记录
- 如何将下面xml放到datagridview中
- codebook背景建模原理
- Same binary weight 位操作 bitset用法 STL
- x命名空间详解
- TOMCAT-报错The BASEDIR environment variable is not defined correctly
- pku1016
- C语言结构体的大小——内存对齐和位域的使用
- c++中的适配器
- HDU1203-动态规划DP
- 代理模式
- android 五大应用开发框架