先向各位大佬介绍一个水题

任何一个正整数都可以用2的幂次方表示。例如

  1. 137=2^7+2^3+2^0

同时约定方次用括号来表示,即a^b 可表示为a(b)。

由此可知,137可表示为:

  1. 2(7)+2(3)+2(0)

进一步:7= 2^2+2+2^0 (2^1用2表示)

  1. 3=2+2^0

所以最后137可表示为:

  1. 2(2(2)+2+2(0))+2(2+2(0))+2(0)

又如:

  1. 1315=2^10 +2^8 +2^5 +2+1

所以1315最后可表示为:

  1. 2(2(2+2(0))+2)+2(2(2+2(0)))+2(2(2)+2(0))+2+2(0)

输入输出格式

输入格式:

一个正整数n(n≤20000)。

输出格式:

符合约定的n的0,2表示(在表示中不能有空格)

输入输出样例

输入样例#1: 复制

  1. 1315
输出样例#1: 复制

  1. 2(2(2+2(0))+2)+2(2(2+2(0)))+2(2(2)+2(0))+2+2(0)
  2.  
  3. 作为蒟蒻的我,对这道题表示被括号吓到了,但。。。
    大致思路是这样的
  1. : ++++
  2. //需要位运算的支持(请忽略)
  3. stack
  4. : =+
  5. stack
  6. stack
  7. if(stack[i]<=) s.pop(); return i;
  8. else printf("2(%d)",find(x));

思路大概是对的,但对于我来说,程序实践又成为了一个问题。

不打代码都不知道自己原来这么水。orz

于是我去翻了翻题解

  1. #include <cstdio>
  2. #include <iostream>
  3. #include <algorithm>
  4. #include <bitset>
  5. using namespace std;
  6. int n;
  7. void solve(int x)
  8. {
  9. if(x==||x==||x==)return ;//1,2,0不作分解
  10. bitset<> b=x;//STL大法好啊
  11. int sum=b.count(),s=;//记录何时到最后一位,以便输出"+"
  12. for(int i=b.size()-;~i;--i)//从高阶位遍历
  13. if(b[i])//如果是1,则处理
  14. {
  15. s++;//记录已经走过的位数
  16. printf("");
  17. if(i!=)printf("(");//只有次幂不为一时输出括号
  18. solve(i);//递归
  19. //递归输出:
  20. if(i==||i==)printf("%d",i);//只输出2,0
  21.  
  22. if(i!=)printf(")");
  23. if(s<sum)printf("+");
  24. }
  25. }
  26. int main()
  27. {
  28. cin>>n;
  29. if(n==)return printf("2(0)"),;//特殊点判断
  30. if(n==)return printf(""),;
  31. solve(n);//进入递归
  32. return ;
  33. }
  34.  
  35. //作者: 蠢萌_小三爷 (luogu ID) orz

我觉得bitset这个东西简直太神奇了。

所以我就去查了查:

    C++语言的一个类库,用来方便地管理一系列的bit位而不用程序员自己来写代码。

    bitset除了可以访问指定下标的bit位以外,还可以把它们作为一个整数来进行某些统计。

(人话:定义一串二进制数)

具体操作:

定义:

  1. #include<bitset>
  2. using namespace std;
  3. bitset<> u(s); //32位的u,是s的一个副本
  4. bitset<> u(s,pos,n) //32位的u,是从n开始的s的一个副本
  5. bitset<> u; //32位的u,每一位都为0
    bitset<32> u(0x7ffff)

和vector的元素一样,bitset中的位是没有命名的,程序员只能按位置来访问它们。位集合的位置编号从0开始,因此,bitvec的位序是从0到31。以0位开始的位串是低阶位(low-order bit),以31位结束的位串是高阶位(high-order bit)。

当用unsigned long值作为bitset对象的初始值时,该值将转化为二进制的位模式。

在32位unsigned long的机器上,十六进制值0xffff表示为二进制位就是十六个1和十六个0(每个0xf可表示为1111)。可以用0xffff初始化bitset对象

当用string对象初始化bitset对象时,string对象直接表示为位模式。

具体函数操作

to_ulong操作返回一个unsigned long值,该值与bitset对象的位模式存储值相同。仅当bitset类型的长度小于或等于unsigned long的长度时,才可以使用to_ulong操作。

果然还是好神奇!!!

ps:本文的部分资料来自

Liam Q的专栏,各位可以去膜拜原大佬

连接在此:http://blog.csdn.net/qll125596718/article/details/6901935

发现的好东西——bitset的更多相关文章

  1. 翻String.Format源码发现的新东西:StringBuilderCache

    起因: 记不清楚今天是为毛点想F12看String.Format的实现源码了,反正就看到了下图的鸟东西: 瞬间石化有没有,StringBuilder还能这么获取? 研究StringBuilderCac ...

  2. 科学家用AI看月球后,却发现了这些东西

    ​​人工智能(AI)几乎已经无所不在,我们生活的大多数方面都已经被它们渗透,随着AI在过去几年取得的令人震惊的进步,它在许多方面都可能帮助我们的生活变得更美好.近日,AI在月球上发现了近7000个未被 ...

  3. 刚从一道题发现的一些东西,PHP笔记,关于extract和null 空字符串

    队友发给我的一道extract变量的最基础的题目,他发现了一些问题,当传入shiyan=&flag=0时出flag,当传入shiyan=0&flag=0时不出flag,传入shiyan ...

  4. 从HDFS的写入和读取中,我发现了点东西

    摘要:从HDFS的写入和读取中,我们能学习到什么? 本文分享自华为云社区<从HDFS的写入和读取中,我们能学习到什么>,作者: breakDawn . 最近开发过程涉及了一些和文件读取有关 ...

  5. JavaScript--我发现,原来你是这样的JS(引用类型不简单,且听我娓娓道来)

    一.介绍 没错,这是第五篇,到了引用类型,这次要分成两次博文了,太多内容了,这是前篇,篇幅很长也很多代码,主要讲引用类型和常用的引用类型,代码试验过的,老铁没毛病. 坚持看坚持写,不容易不容易,希望大 ...

  6. HttpClientFactory与Steeltoe结合来完成服务发现

    前言 上一篇说了一下用HttpClientFactory实现了简单的熔断降级. 这篇就来简单说说用HttpClientFactory来实现服务发现.由于标题已经好明显的说了Steeltoe 因此这里会 ...

  7. NOIP不开心记(不开心的东西肯定不能给别人看!)

    写在前面的.. noip之后一直很想写一下什么的.. 老师:这就是你逃晚自习来机房的原因?? Day 0 坐了好久的车来到GZ.. 年年都是GZ.. sb酒店垃圾的要死.. 路上都是杀马特.. 隔壁还 ...

  8. JS--我发现,原来你是这样的JS(引用类型不简单[上篇],且听我娓娓道来)

    一.介绍 没错,这是第五篇,到了引用类型,这次要分成两次博文了,太多内容了,这是前篇,篇幅很长也很多代码,主要讲引用类型和常用的引用类型,代码试验过的,老铁没毛病. 坚持看坚持写,不容易不容易,希望大 ...

  9. 发现一个nginx LUA开发Web App的框架

    nginx是个好东西, nginx的openrtsy发行版本更是个好东西. 今天又发现个好东西 :Moochine MOOCHINE - 一个简单的轻量级的web framework, 基于ngx_O ...

随机推荐

  1. 解读tensorflow之rnn 的示例 ptb_word_lm.py

    这两天想搞清楚用tensorflow来实现rnn/lstm如何做,但是google了半天,发现tf在rnn方面的实现代码或者教程都太少了,仅有的几个教程讲的又过于简单.没办法,只能亲自动手一步步研究官 ...

  2. appium的初始化准备工作

    文章出处http://blog.csdn.net/jiuzuidongpo/article/details/51790455 Appium在接收到客户端脚本的连接之后的初始化准备工作列表(细节部分详细 ...

  3. python16_day12【html、css】

    一.HTML 所有HTML标签操作 <!DOCTYPE html> <html lang="en"> <head> <!--编码--> ...

  4. web.xml配置之<context-param>详解

    读完本文,你将了解(1)<context-param>的作用和用法,(2)<context-param>配置和<init-param>的区别 <context ...

  5. hive--[ array、map、struct]使用

    复合数据类型 Structs: structs内部的数据可以通过DOT(.)来存取,例如,表中一列c的类型为STRUCT{a INT; b INT},我们可以通过c.a来访问域a Maps(K-V对) ...

  6. sqlservr.exe占用大量内存

    SQL Server是如何使用内存 最大的开销一般是用于数据缓存,如果内存足够,它会把用过的数据和觉得你会用到的数据统统扔到内存中,直到内存不足的时候,才把命中率低的数据给清掉.所以一般我们在看sta ...

  7. 2018-2019-2 20165114《网络对抗技术》Exp1 逆向与Bof基础

    逆向及Bof基础实践 目录 一.实践目标 二.实验操作和步骤 1.直接修改程序机器指令 2.通过构造输入参数,造成BOF攻击. 3.注入Shellcode并执行 三.实验总结 四.实验遇到的错误和问题 ...

  8. 验证码插件代码:image.jsp

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"% ...

  9. 网络性能监测工具smokeping

    smokeping简介: smokeping是rrdtool的作者Tobi Oetiker的作品,所以它在图形显示方面有很大优势,也是一个很有特点的opensource工具:多种探测方式,包括fpin ...

  10. jquery知识location.search

    location.search在客户端获取Url参数的方法 location.search是从当前URL的?号开始的字符串如:http://www.baidu.com/s?wd=baidu&c ...