Same binary weight 位操作 bitset用法 STL
2014-02-18 21:06
435 查看
Same binary weight
时间限制:300 ms | 内存限制:65535 KB难度:3
描述
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.
样例输入
1717 4 7 12 555555
样例输出
1718 8 11 17 555557
来源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; else b[i]=0; } //cout<<b<<endl; cout<<b.to_ulong()<<endl; } }
相关文章推荐
- Same binary weight bitset(STL)
- NYOJ412 Same binary weight 【bitset位操作】
- NYOJ 412 Same binary weight(bitset位运算)
- Same binary weight(stl 位运算)
- NYOJ 题目412 Same binary weight(bitset)
- 【南理oj】412 - Same binary weight(STL - 双端队列 & 全排列)
- NYOJ 412 Same binary weight(bitset位运算)
- nyoj412 Same binary weight(bitset类运用)
- STL bitset用法总结
- Same binary weight 位运算相关
- acm-Same binary weight
- Nyist 416 -- Same binary weight
- Same binary weight
- C++ STL bitset 用法整理
- [面试经]STL bitset用法总结
- STL bitset用法总结
- nyoj 412 Same binary weight
- 练习场acm 题目412 Same binary weight
- Same binary weight
- NYOJ - Same binary weight