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

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

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

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

由此可知,137可表示为:

    2(7)+2(3)+2(0)

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

    3=2+2^0   

所以最后137可表示为:

    2(2(2)+2+2(0))+2(2+2(0))+2(0)

又如:

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

所以1315最后可表示为:

    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: 复制

1315
输出样例#1: 复制

2(2(2+2(0))+2)+2(2(2+2(0)))+2(2(2)+2(0))+2+2(0)

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

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

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

于是我去翻了翻题解

#include <cstdio>
#include <iostream>
#include <algorithm>
#include <bitset>
using namespace std;
int n;
void solve(int x)
{
if(x==||x==||x==)return ;//1,2,0不作分解
bitset<> b=x;//STL大法好啊
int sum=b.count(),s=;//记录何时到最后一位,以便输出"+"
for(int i=b.size()-;~i;--i)//从高阶位遍历
if(b[i])//如果是1,则处理
{
s++;//记录已经走过的位数
printf("");
if(i!=)printf("(");//只有次幂不为一时输出括号
solve(i);//递归
//递归输出:
if(i==||i==)printf("%d",i);//只输出2,0 if(i!=)printf(")");
if(s<sum)printf("+");
}
}
int main()
{
cin>>n;
if(n==)return printf("2(0)"),;//特殊点判断
if(n==)return printf(""),;
solve(n);//进入递归
return ;
} //作者: 蠢萌_小三爷 (luogu ID) orz

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

所以我就去查了查:

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

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

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

具体操作:

定义:

#include<bitset>
using namespace std;
bitset<> u(s); //32位的u,是s的一个副本
bitset<> u(s,pos,n) //32位的u,是从n开始的s的一个副本
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. 006-shiro授权

    一.授权流程 二.三种授权方式 2.1.编程式:通过写if/else 授权代码块完成: Subject subject = SecurityUtils.getSubject(); if(subject ...

  2. IOS JAVA PHP 安卓 通用加密方式

    PHP代码: class Aes { private $hex_iv = '00000000000000000000000000000000'; // converted JAVA byte code ...

  3. Tkprof工具详解一(转载)

    在数据库生成的oracle trace文件中,可读性是比较差的,此时可使用tkprof工具来格式化trace文件,tkprof是一个命令行工具,作用就是把原始的跟踪trace文件作为输入,然后格式化一 ...

  4. http的请求流程

    # !/usr/bin/env python # coding:utf-8 import socket def handle_request(client): buf = client.recv(10 ...

  5. Java并发之——线程池

    一. 线程池介绍 1.1 简介 线程池是一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务.线程池的基本思想还是一种对象池的思想,开辟一块内存空间,里面存放了众多(未死亡 ...

  6. Kattis - cokolada【水】

    Kattis - cokolada[水] 题意 有一个人想吃巧克力,但是巧克力都是按照 2 的幂次的数量包装的,然后他想吃一定数量块的巧克力,然后可以敲碎,每次敲碎都分成两半,比如四块装的分成两块就是 ...

  7. [CTSC2008]祭祀

    题目描述 在遥远的东方,有一个神秘的民族,自称Y族.他们世代居住在水面上,奉龙王为神.每逢重大庆典, Y族都会在水面上举办盛大的祭祀活动.我们可以把Y族居住地水系看成一个由岔口和河道组成的网络.每条河 ...

  8. jQuery带小图标的Tab切换焦点图

    在线演示 本地下载

  9. 20145201 《Java程序设计》第一周学习总结(修改)

    # 20145201 <Java程序设计>第一周学习总结 ## 教材学习内容总结 万事开头难,终于开始学习了Java.寒假的时候看到老师的要求确实有点慌,但是这周翻开书,从书本知识第一行学 ...

  10. Jave基础之选择排序

    选择排序(Selection sort) 基本介绍 选择排序: 每一次从未排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余未排序的元素中选出最小(或最大的)放在已排序序 ...