NYIST 412 Same binary weight使用bitset
来源:互联网 发布:网络最红女主播是谁 编辑:程序博客网 时间:2024/06/05 11:00
这两天在学习STL,刚开始我以为bitset没有什么用,直到看到题目才知道大错特错,bitset也是很有用的容器。
先说一下按位与&运算符:同时为一,结果才为一,否则都为0 。
题目链接:点击打开链接
先重新学习一下bitset位集合容器。
bitset容器是一个bit位元素的序列容器,每个元素只占一个bit位,取值为0或1.
bitset类的方法的介绍:
1、创建bitset对象: bitset<10>b; 能容纳10个元素的对象b
bitset<10>b(8); 将8化为二进制存到b中
2、b.any() b中是否存在置为1的二进制位?
b.none() b中不存在置为1的二进制位吗?
b.count(); b中置为1的二进制个数
b.size() ; b中二进制的个数
b.test(1); b中在1位置的二进制位是否为1
b.set(); 把b中所有二进制位都置为1
b.reset(); 把b中所有二进制位都置为0
b.set(5); 把b中在5位置的二进制位置为1
b.reset(5); 把b中在5位置的二进制位置为0
b.flip(); 把b中所有二进制位按位取反
b.flip(5); 把在5位置的二进制位按位取反
b.to_ulong();在b中同样的二进制位返回一个unsigned long值
os<<b; 把b中的位集输出到os流
以下是这道题目AC的代码:
#include<bitset>#include<iostream>using namespace std;int main(){ int i,j,n,ct; while(cin>>n) { i=0,ct=0; bitset<33>b; while(n) //存为二进制 { if(n%2) b.set(i); n/=2; i++; } for(j=0;j<i;j++) //找到为01的位置j { if(b.test(j)&&b.test(j+1)==0) { b.flip(j); //1和0互换位置,也就是两个数都取反 b.flip(j+1); break; } } for(i=0;i<j;i++) //计算在01之后有多少个1 { if(b.test(i)) ct++; } for(i=0;i<j;i++)//将01之后的数都置为0 b.reset(i); for(i=0;i<ct;i++)//将ct个1放在末尾 b.set(i); cout<<b.to_ulong()<<endl;//输出这个数 } return 0;}
- NYIST 412 Same binary weight使用bitset
- Same binary weight bitset(STL)
- NYOJ 题目412 Same binary weight(bitset)
- NYOJ 412 Same binary weight(bitset位运算)
- NYOJ 412 Same binary weight(bitset位运算)
- NYOJ412 Same binary weight 【bitset位操作】
- NYOJ 412 Same binary weight
- nyoj 412Same binary weight
- NYOJ 412 Same binary weight
- nyoj 412 Same binary weight
- Same binary weight 位操作 bitset用法 STL
- nyoj412 Same binary weight(bitset类运用)
- nyoj-412-Same binary weight(位运算)
- NYOJ 412 Same binary weight题解
- Same binary weight
- NYOJ - Same binary weight
- acm-Same binary weight
- Same binary weight 数学
- onlongclick不执行
- 汇编cmp比较指令详解
- tactic 服务器迁移
- 检查Linux机器的内存使用状况之Shell脚本实现
- 官方文档对weblogic stuck线程的描述
- NYIST 412 Same binary weight使用bitset
- 一道简单的贪心算法
- 读取,添加,修改xml文件
- 如何使用JDBC+Struct2框架的poi读取Excel的数据然后插入Sql Server数据库中
- 老徐教你学C语言(C语言进门教程)
- 对spring任务定时器的动态修改
- python有各种各样的string操作函数
- linux 中dirname的用法
- java.lang.IllegalStateException: getOutputStream() has already been called 解决方法