系列trick - bitmask

拆位

主体思想:位之间不影响,把每一位拆开来考虑贡献,转化成非常容易考虑的 0/1。

首先要看出来位之间不影响,当题目涉及二进制运算时应当首先注意的就是这一点。

例题有一堆,这里拿最近做的一个举例子

CF1327F:这题给你若干个限制 \((l,r,x)\),表示 \([l,r]\) 的区间AND和必须是 \(x\);求满足条件长度为 \(n\),并且每个数都 \(<2^k\) 的序列数。

显然位独立,然后相当于限制区间都是 \(1\) 或者区间至少有一个是 \(0\)。随便 dp 一下就可以计数了。然后把每一位的答案乘起来,就是最后的答案了。

代码

例2:整数 求逆序对的神秘方法

从高到低来考虑,如果当前的位就能比较出结果(相当于一个01序列求逆序对, 开个cnt记一下即可),就计入答案;当前位相同的用分治的技巧分成两部分解决。复杂度是值域的 \(\log\),乘以 \(n\) 。

它看起来很傻逼,但是由于它拆位,支持更多操作(详见分治那篇里的题)

位运算优化(点少的)图操作

点少:指 \(2^n\times ...\) 可以通过。

主体思想:用位运算加速图的操作,以优化掉复杂度 卡常

讲道理,其实纸面复杂度没有被优化,只是把一些耗时间的操作交给 cpu 来搞了,比如把一个 \(O(n)\) 的操作用位运算做掉,变成 “\(O(1)\)”

有啥用呢?\(n=24,25\) 的时候,\(2^n\) 的复杂度多一个 \(n\) 都是过不去的。

比如,可以把每个点的出边压成一个集合,然后每次把当前的状态跟它或以下,就可以实现搜索中的 “扩展”。

例1 判断强连通,\(n\le 24\) :这个题 的 \(60\) 分,\(O(2^n n)\) 的做法。

例2 例1的100分 (这个还涉及到筛法,见下一个trick)

位筛

主体思想:筛法,定义域为二进制压缩的集合

这类问题时间复杂度通常会有保证:每个集合只会被筛一次,复杂度是 \(O(2^n)\)

详见这篇文章

系列trick - bitmask的更多相关文章

  1. 系列trick - 随机

    系列trick - 随机 不断更新中,欢迎来提供idea 随机的字符串 出现次数 \(\ge 2\) 的子串期望长度是 \(\log n\) 两个随机串的期望LCP,LCSuf,LCSub长度是 \( ...

  2. 系列trick - 建图

    对偶图 主体思想:平面图的割,等价于对偶图的路 例题:[BeiJing2006]狼抓兔子 网上有114514篇题解,这里不赘述 点变边 主体思想:点带点权,而要在点上实现一些在边上的问题,比如最小割点 ...

  3. 解读ASP.NET 5 & MVC6系列(8):Session与Caching

    在之前的版本中,Session存在于System.Web中,新版ASP.NET 5中由于不在依赖于System.Web.dll库了,所以相应的,Session也就成了ASP.NET 5中一个可配置的模 ...

  4. Java多线程系列--“JUC集合”05之 ConcurrentSkipListMap

    概要 本章对Java.util.concurrent包中的ConcurrentSkipListMap类进行详细的介绍.内容包括:ConcurrentSkipListMap介绍ConcurrentSki ...

  5. Java多线程系列--“JUC集合”08之 LinkedBlockingQueue

    概要 本章介绍JUC包中的LinkedBlockingQueue.内容包括:LinkedBlockingQueue介绍LinkedBlockingQueue原理和数据结构LinkedBlockingQ ...

  6. Java多线程系列--“JUC集合”09之 LinkedBlockingDeque

    概要 本章介绍JUC包中的LinkedBlockingDeque.内容包括:LinkedBlockingDeque介绍LinkedBlockingDeque原理和数据结构LinkedBlockingD ...

  7. Java多线程系列--“JUC集合”10之 ConcurrentLinkedQueue

    概要 本章对Java.util.concurrent包中的ConcurrentHashMap类进行详细的介绍.内容包括:ConcurrentLinkedQueue介绍ConcurrentLinkedQ ...

  8. Maven提高篇系列之(二)——配置Plugin到某个Phase(以Selenium集成测试为例)

    这是一个Maven提高篇的系列,包含有以下文章: Maven提高篇系列之(一)——多模块 vs 继承 Maven提高篇系列之(二)——配置Plugin到某个Phase(以Selenium集成测试为例) ...

  9. 《zw版·Halcon-delphi系列原创教程》 Halcon分类函数006, image,影像处理(像素图)

    <zw版·Halcon-delphi系列原创教程> Halcon分类函数006, image,影像处理(像素图) 为方便阅读,在不影响说明的前提下,笔者对函数进行了简化: :: 用符号“* ...

随机推荐

  1. 采购订单写入sap失败后,抛出自定义异常,回滚数据库

    @Transactional(rollbackFor = Exception.class) @Override public Map<String,Object> getOderInfo( ...

  2. [leetcode]62.UniquePaths

    /** * Created by lvhao on 2017/7/6. * A robot is located at the top-left corner of a m x n grid (mar ...

  3. Qt学习笔记-制作一个文本编辑器

    创建一个MainWindow工程.添加一个TextEdit.垂直布局. 在menu上面创建新的action. 在新建的时候判断文本有没有被修改. 下面,将某个文件打开读入到TextEdit中. 保存文 ...

  4. wildfly 21的配置文件和资源管理

    目录 简介 wildfly的配置文件 extensions profile path interface socket-binding management 资源管理 总结 简介 在上一篇文章我们介绍 ...

  5. Java JVM——8.堆

    堆的核心概念 堆针对一个 JVM 进程来说是唯一的,也就是一个进程只有一个JVM,但是进程包含多个线程,他们是共享同一堆空间的. 一个JVM实例只存在一个堆内存,堆也是Java内存管理的核心区域. J ...

  6. java开发手册之哨兵语句

    if(条件判断1){ return; } if(条件判断2){ return; } //do  another things 注意事项:一定要避免多个if else 判断 带来逻辑混乱 可读性变差

  7. 别再费劲去找后台的前端框架了,2021 年就用 Fantastic-admin 吧

    前言 你知道光是基于 Vue 的后台框架在 Github 上有多少个仓库么? 如果你搜索 vue admin 会得到 13120 个仓库,如果用 vue 后台 会得到 7596 个仓库,如果把两者结合 ...

  8. 漫画 | 小公司卧薪尝胆三年,意外拿到美团offer

    今天给大家分享一篇,非科班出生的野生前端从业者的励志成长故事,故事的主人公王大拿(化名),在小公司打杂三年后,意外拿到了美团的offer,成功进阶大厂,跳槽到了美团的核心外卖事业部. 事故主人公:王大 ...

  9. PPT 转 word

    可以wps  直接转 打开wps   在页面里直接点击右键  可以导出wps

  10. Docker学习笔记之使用Docker数据卷

    Docker数据卷将数据存储到主机而非容器,多个容器需要共享数据时,常常使用数据卷. 1. 为容器设置数据卷(不指定主机目录) 2. 容器与主机之间.容器与容器之间共享数据卷(指定主机目录) 3. 使 ...